簡體   English   中英

C程序按位:值為-1 >> 1

[英]C programme bitwise: value of -1 >> 1

對於GCC 32位,-1 >> 1返回我FFFFFFFF,但我認為在2的補碼之后,我將得到0111 1111 ... 1111,這應該是7fff ffff。 我錯過了什么?

大多數實現中,該運算符對有符號類型執行arithmetic shift ,因此它保留sign位(最左邊的位),在本例中為1

正如@Clifford正確指出的那樣,語言標准將>>的實現留給了實現者。

有關詳細信息,請參閱Wikipedia文章

對於E1 >> E2 ,如果E1為負,則行為是實現定義的,這意味着不同的編譯器可以使用不同的策略來實現它。

顯然,GCC選擇算術移位,正如@ merlin2011所指出的那樣

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM