这个C ++宏有什么作用?

时间:2009-06-17 17:41:39

标签: c++ operators macros

这适用于MSVC

#define Get64B(hi, lo) ((((__int64)(hi)) << 32) | (unsigned int)(lo))

具体来说,'运营商&lt;&lt;'的作用是什么? ?

感谢您的帮助

8 个答案:

答案 0 :(得分:17)

&LT;&LT;是左移算子。此宏旨在从两个32位值生成64位值,使用第一个参数作为前32位,第二个参数作为新值的底部32位。

答案 1 :(得分:3)

它需要两个32位整数并返回一个64位整数,第一个参数为32位高位,第二个参数为32位低位。

&LT;&LT;是左移算子。它需要高32位,将它们移位,然后将该结果与低位进行或运算。

答案 2 :(得分:2)

运营商&lt;&lt;是二元左移运算符。它将int64变量hi向左移位32位。

答案 3 :(得分:2)

AakashM是正确的。写作方法可能更容易理解

__int64 Get64B(__int32 hi, __int32 lo) {
  __int64 combined = hi;
  combined = combined << 32;  // Shift the value 32 bits left.  Combined
                              // now holds all of hi on the left 32 bits
  combined = combined | lo;   // Low 32 bits now equal to lo
  return combined;
}

答案 4 :(得分:0)

它将hi的值向左移位32位。

答案 5 :(得分:0)

这是左移位运算符,其标准含义(对于数字类型)将位移到左侧

int a = 1;
int b = a << 3; // b is now 1000 binary, 8 decimal

代码从两个32位数字中创建一个64位数字。

答案 6 :(得分:0)

使用两个32位int返回64位int,一个用作de hi order字节,第二个用作低位字节。

hi&lt;&lt; 32将整数转换为64位int的高位字节。例如:

Get64B(11111111111111110000000000000000,000000000000000011111111111111111)

返回11111111111111110000000000000000000000000000000011111111111111111

因为11111111111111110000000000000000&lt;&lt; 32返回

1111111111111111000000000000000000000000000000000000000000000000

答案 7 :(得分:-1)

返回两个8,16,32或64位整数的64位整数。 这更安全:Hi&lt;&lt; 32 | LO