今天發現一個問題, 假如 i = 12, 那麼 j = i >> 32, 則j = 12;但是j = i >> 31,j = j >> 1,則j = 0為什麼呀。
對於右移大於或等於位寬的操作,或者右移負數的操作,其結果將依賴於編譯器的處理和硬件指令的處理,並不唯一。32正好是一個int變量所占的內存,但這種位移的行為是未定義的。由編譯器決定,所以沒有標准答案。在VC++編譯器上是等於原值的
LZ可以看一下匯編的代碼就會發現,編譯器直接把代碼編譯成了賦值操作,而沒有做移位操作.
所以第一種情況下還是原值,而第二種由於移位小於32位,所以就按正常的移位操作來,就得到了0