我試圖處理位板,這需要我在64位無符號整數中設置一個特定的位。要設置位我,我執行一個按位或與有問題的位板,左移數字。C++中的64位整數的按位(Bitshift)操作
它工作正常,從0位到第31位,但未能對位工作32到63我懷疑這是因爲右側的評價恰好是在32位整數。因此,我嘗試了一個臨時變量。
uint64_t temp = 0ULL;
temp |= 1 << i;
也許它仍然評估作爲一個32位整數的右側,或者這是我無法弄清楚的其他問題。要輸出整數,我使用std :: bitset < 64>。例如:
uint64_t kings = 0ULL;
kings |= 1 << 3;
kings |= 1 << 59;
預期十進制值:576460752303423496
實際:8
std::bitset<64> x(kings);
std::cout << x;
位值:0000000000000000000000000000000000000000000000000000000000001000
顯然,只有國王| = 1 < < 3;正確工作。
總之,第32到63位是什麼問題,我該如何解決它?
你嘗試 '王| =(uint64_t中)1 <<(uint64_t中)I;'或'國王| = 1ULL <<我;'? –
@DannyRuijters沒有想到它。我試圖將它等同於臨時uint64_t。關! –