位移为32个64的无符号整数
问题描述:
我有此片段的代码的一个问题:位移为32个64的无符号整数
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位。我在某处读到可以安全移动大小为1的位,所以如果我写入没有'UUL'的指令并且文字'1'是32位长,那么将它移位31位应该是安全的,对吗? 我在这里错过了什么?
问候
YotKay
对。谢谢! “ – YotKay
”是的,我知道'd'的解决方案是使用'1ULL'。“你知道错了,在这种情况下1U就足够了。 – Slava