[英]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.