这适用于MSVC
#define Get64B(hi, lo) ((((__int64)(hi)) << 32) | (unsigned int)(lo))
具体来说,'运营商&lt;&lt;'的作用是什么? ?
感谢您的帮助
答案 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