邏輯移位與算術移位

2021-10-03 14:59:07 字數 721 閱讀 9019

1.邏輯移位

不論是左移還是右移都是直接補0,所有位參與移位。

2.算術移位

與邏輯移位的區別在於符號位不參與移位。當為雙符號位時,只有最高符號位才是真符號位,低符號位會參與移位,而如果移位後為01或10,則說明溢位。如補碼1,010 0000左移一位後為1,100 0000。

當機器數為正時:

無論左移、右移,原碼、補碼、反碼均補0。

當機器數為負時:

1)原碼:由於除符號位外,數值位與真值相同,所以移位時只要保證符號位不變,其餘均補0。

2)反碼:由於反碼是原碼各位取反,所以無論左移還是右移都是補1。

3)補碼:由於補碼除最後一位與原碼相同,其他位都是與原碼相反,所以左移後最低位補0,右移後最高位補1。

移位後的影響:

1.機器數為正

如果左移,此時如果最高位為1丟掉,則值會出現錯誤;如果右移,最低位此時如果為1被丟掉,只會影響精度。

2.機器數為負

1)原碼和機器數為正的時候一樣。

2)反碼:左移,如果此時最高位為0,對應的原碼是1,則會出錯。右移,如果此時最低位為0,只會影響精度。

3)補碼:左移,如果此時最高位為0,對應的原碼是1,則會出錯。右移,如果此時最低位為1(最低位與原碼相同),只會影響精度。

算術移位邏輯移位

unsigned int i 8 int main 請問 上面的變數i是採用邏輯移位還是算術移位呢?邏輯移位,簡單理解就是物理上按位進行的左右移動,兩頭用0進行補充,不關心數值的符號問題。算術移位,同樣也是物理上按位進行的左右移動,兩頭用0進行補充,但必須確保符號位不改變。邏輯移位是指邏輯左移和邏輯...

算術移位和邏輯移位

算術移位和邏輯移位 unsigned int i 8 int main 上面的變數i是採用邏輯移位還是算術移位呢?邏輯移位,簡單理解就是物理上按位進行的左右移動,兩頭用0進行補充,不關心數值的符號問題 算術移位,同樣也是物理上按位進行的左右移動,兩頭用0進行補充,但必須確保符號位不改變 但我們好奇的...

算術移位和邏輯移位

算術移位和邏輯移位 unsigned int i 8 int main 上面的變數i是採用邏輯移位還是算術移位呢?邏輯移位,簡單理解就是物理上按位進行的左右移動,兩頭用0進行補充,不關心數值的符號問題 算術移位,同樣也是物理上按位進行的左右移動,兩頭用0進行補充,但必須確保符號位不改變 但我們好奇的...