设置int64_t中的所有位

时间:2013-05-02 23:13:32

标签: c++ int64

从下面的代码中我希望将x中的所有位设置为1,但不知何故只设置了前32位:

int64_t x = 0xFFFFFFFF;
x<<32;
x|=0xFFFFFFFF;

注意:在每行之后打印x会产生4294967295(32位低位设置为1)。 此外,尝试使用numeric_limits<int64_t>::min()但没有成功。 我的问题是如何设置x中的所有位? 使用RHEL5.5。

THX

3 个答案:

答案 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,但不能保证 - 取决于编译器。