【发布时间】:2016-11-17 19:22:12
【问题描述】:
我对这段代码的 sn-p 有疑问:
uint32_t c = 1 << 31;
uint64_t d = 1 << 31;
cout << "c: " << std::bitset<64>(c) << endl;
cout << "d: " << std::bitset<64>(d) << endl;
cout << (c == d ? "equal" : "not equal") << endl;
结果是:
c: 0000000000000000000000000000000010000000000000000000000000000000
d: 1111111111111111111111111111111110000000000000000000000000000000
not equal
是的,我知道“d”的解决方案是使用“1ULL”。但我不明白为什么当移位为 31 位时会发生这种情况。我在某处读到移动 size-1 位是安全的,所以如果我编写没有“UUL”的指令并且文字“1”的长度为 32 位,那么将其移动 31 位应该是安全的,对吧? 我在这里错过了什么?
问候
YotKay
【问题讨论】:
-
对。谢谢!
-
"是的,我知道 'd' 的解决方案是使用 '1ULL'。"你知道错了,这种情况下1U就够了。
标签: c++