我正在學習C語言。我有這樣的代碼,更可在需要時提供:當我用GDB和打印/x mask1
>>移位操作符不按預期方式工作
int result = 0;
int mask1 = 0x0000ffff;
mask1 = mask1 >> 28;
,我得到0x0
,這是正確的。 那麼爲什麼:
int result = 0;
int mask1 = 0xffffffff;
mask1 = mask1 >> 28;
print 0xffffffff
應該不是被打印0x0000000f
,因爲我左移28位?
它與我在64位機器上佔用的位數有關嗎? 我看着this,但它並沒有完全回答。
將'mask1'設爲'unsigned int',您將體驗到您期望的行爲(即邏輯右移)。 – oldrinb
@veer謝謝。那樣做了。 – Clara
閱讀實用的程序員,這本書有一個標題爲「選擇不壞」的部分。它描述了你遇到的問題。 – Incognito