gibi bir Int64 düşük 32 bit almak istiyorum, ama sadece alt 32 bit gerekir. Bu nedenle Int32 değerini Int64 değerinin 32 bitinden almanın hızlı bir yolunu istiyorum.Ben bir Int64 değeri int32
Teşekkür
gibi bir Int64 düşük 32 bit almak istiyorum, ama sadece alt 32 bit gerekir. Bu nedenle Int32 değerini Int64 değerinin 32 bitinden almanın hızlı bir yolunu istiyorum.Ben bir Int64 değeri int32
Teşekkür
Do şey:
long tempLong = ((yourLong >> 32) << 32); //shift it right then left 32 bits, which zeroes the lower half of the long
int yourInt = (int)(yourLong - tempLong);
Bunu yapmanın en kompakt yol olmayabilir, ama bana en okunabilir gibi görünüyor. Aşağıdaki kod uzun yüksek yarısını çıkartacaktır: Bir int32 değerine bir int64 değeri atarsanız
long tempLong = (int)(yourLong >> 32);
Derleyicinin en iyi duruma getirme şekline bağlı olarak, ilk kod örneğiniz yalnızca dökümden daha yavaş olabilir. Şahsen ben de özellikle bulamadım. –
, düşük 32 bit üzerinden sıfır 'kullanımı yourLong ve 0xFFFFFFFF00000000' veya to yourLong ve (~ 0ULL << 32) ', üst tarafı her zaman kesilir, çünkü düşük bit almak için, sadece basit bir atama gereklidir, bu derleyici, kullanmanız için uyarır 'yourInt = (int) yourLong' –
Sen dili belirtmedi, ancak birçok yer, yapmanız gereken tüm bir ınt32 için döküm olduğunu. Üst bitler atılacaktır. Böyle
, derleyici otomatik
(Steven Sudit olarak bahsedilen) için yapacak:
int64 val64 = ...;
int32 val32 = ...;
...
val32 = val64; // get the low 32 bits
// or
val32 = (val64 >> 32); // get the high 32 bits
ve derleyici uyarıları gösterebilir çünkü döküm belirtebilirsiniz
val32 = (int32)val64;
Yapabilirsin derleyici endian-lik idare ve (Bence) vb C/C++ en iyi şekilde
DWORD CUtility::ConvertUint64toUint32(unsigned __int64 in64){
ULARGE_INTEGER uli;
uli.QuadPart = in64;
return uli.LowPart;
}
tüm bit kaydırma, işaretçi manipülasyon saklayalım bir birlik kullanmaktır. Örneğin, aşağıdaki işlev, 64 bitlik bir tam sayıdan alt sıra 32 bitlerini ayıklamak için bir anonim birleşim kullanır.
uint32_t lower_32_bits(uint64_t value) {
union { uint64_t value; struct { uint32_t high, low; }; } converter;
converter.value = value;
return converter.low;
}
Bu birlik hüner
aynı bitlength, örneğin bir tamsayı içine kayan nokta değeri bit alma gibi her türlü şeyi kullanılabilir bitly işlemleri ve diğer hack yapmak için.
Bu hangi bir dildir? lütfen doğru etiketi ekleyin –
Ben kimsenin dili bilmeden bu soruya nasıl cevap vereceğini anlamıyorum. – pseudocoder