我想把int64的低32位作为int32

qin*_*ong 10 int64

我有一个Int64值,但我只需要低32位.因此,我想快速从Int64值的低32位获取Int32值.

谢谢

Nic*_*kis 27

如果将int64值分配给int32值,编译器将自动为您执行此操作
(如Steven Sudit所述):

int64 val64 = ...;
int32 val32 = ...;
...

val32 = val64; // get the low 32 bits
// or
val32 = (val64 >> 32); // get the high 32 bits
Run Code Online (Sandbox Code Playgroud)

并且因为编译器可能会显示警告,您可以指定强制转换

val32 = (int32)val64;
Run Code Online (Sandbox Code Playgroud)


Ste*_*dit 9

您没有指定语言,但在许多情况下,您需要做的就是将其强制转换为Int32.顶部位将被丢弃.


RCI*_*CIX 6

做这样的事情:

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);
Run Code Online (Sandbox Code Playgroud)

这可能不是最紧凑的方式,但它似乎是我最可读的.以下代码将提取long的高半:

long tempLong = (int)(yourLong >> 32);
Run Code Online (Sandbox Code Playgroud)

  • 根据编译器在优化方面的优异程度,您的第一个代码示例可能比仅仅进行转换要慢得多.就个人而言,我也不是特别清楚. (7认同)
  • 要将低32位清零,请使用`yourLong&0xFFFFFFFF00000000`或`yourLong&(~0ULL << 32)`,但要获得低位,只需要一个简单的赋值,因为顶部总是被截断,它是编译器警告使用强制转换`yourInt =(int)yourLong` (2认同)