天天看點

為什麼算術左移和邏輯左移一樣

(1)負數的邏輯左移,明顯符号位被移走了,1變成0了呀,負數不就變成正數了嗎?為何能和算術左移一樣呢?

為了解答這個問題,需要了解在計算機中所有的符号數都是按照補碼存儲的,最高位為符号位(0:整數 1:負數),所謂的補碼:原碼取反+1 構成

例如:8符号整形 -1 的補碼 (源碼)1000 0001  (補碼)1111 1111

                            -64 的補碼  (源碼)1100 0000    (補碼)1100 0000

                         -127 的補碼  (源碼)1111 1111    (補碼)1000 0001

其實左移一位相當于數乘以2之後的結果,現在假設有符号數占8位,表示負數範圍為 -1 ~ -128,如果目前被左移數是(-1~-64),在乘以2之後都是處于合法範圍,而處于這個範圍的數字的補碼的第二位都是1,是以不需要考慮算術右移的符号位

c++

繼續閱讀