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進行補充,但必須確保符號位不改變 但我們好奇的...