C 中的
>`) 在移位 32 位元時會產生意外結果? " />
右移運算子的意外行為(1 >> 32)
在程式設計領域,右移運算子(>> 32) ) 通常用於執行位元運算,特別是用整數除以2 的冪,但是,當移位較大的值時,可能會出現奇怪的行為,如以下C 程式碼所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
令人驚訝的是。 🎜>foo() 的行為函數
1 2 3 4 |
|
在foo()函數中,移位操作是在沒有強制轉換的情況下執行的,導致CPU執行邏輯右移,在許多架構上,邏輯右移實現為>。結果為1。保證為0,因為b (32) 小於操作數(64) 中的位數。 >編譯器最佳化
在1 >> 的情況下32、(int)1>> (int)32,編譯器在編譯時最佳化這些常數表達式。的未定義行為,其中計數為負數或大於或等於操作數的長度。行為
右移的實現不同CPU 的操作可能有所不同。模式。這一點至關重要考慮潛在的未定義行為,特別是當移位計數超過操作數的長度時。 。
以上是為什麼 C 中的右移位運算子 (`>>`) 在移位 32 位元時會產生意外結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!