1
我有此片段的代碼的一個問題:位移爲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