从下面的代码中我希望将x中的所有位设置为1,但不知何故只设置了前32位:
int64_t x = 0xFFFFFFFF;
x<<32;
x|=0xFFFFFFFF;
注意:在每行之后打印x会产生4294967295(32位低位设置为1)。
此外,尝试使用numeric_limits<int64_t>::min()
但没有成功。
我的问题是如何设置x中的所有位?
使用RHEL5.5。
THX
答案 0 :(得分:13)
x<<32
计算将x
左移32位的结果,并且不对值执行任何操作。您想要使用x <<= 32
。
答案 1 :(得分:10)
为什么不int64_t x = -1
?还是uint64_t x = ~0
?
答案 2 :(得分:4)
这将有效:
int64_t x = ~0LL; (iner
或
int64_t x = -1LL;
你可能没有LL
,但不能保证 - 取决于编译器。