【发布时间】:2013-05-02 23:13:31
【问题描述】:
根据以下代码,我希望将 x 中的所有位设置为 1,但不知何故只设置了前 32 位:
int64_t x = 0xFFFFFFFF;
x<<32;
x|=0xFFFFFFFF;
注意:在每行之后打印 x 会导致 4294967295(低 32 位设置为 1)。
另外,尝试使用numeric_limits<int64_t>::min() 没有成功。
我的问题是如何设置 x 中的所有位?
使用 RHEL5.5。
谢谢
【问题讨论】:
-
你是如何打印的?
-
如果一切都失败了,我的意思是因为它不漂亮,
memset(&x, 0xFF, 8)。 -
构建一个流串并打印它,没有精度。假设打印没问题,我在后面的代码中“看到”它是错误的
-
@peachykeen : 尽量避免 memset,但我还是会尝试,谢谢
-
如果你关心比特,你为什么使用
int64_t而不是uint64_t? (并且x<<32不起作用,因为您要丢弃结果;您想要x <<= 32。)但是将1移动到符号位位置具有未定义的行为——因此我对uint64_t的问题。跨度>