(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,是以不需要考慮算術右移的符号位