算數移位 , 與邏輯移位

2021-08-02 21:59:23 字數 674 閱讀 4094

<<, >>是算數移位,也就是-1,如果右移,則 最高位補1; 左移,則右邊補0;

但是uint32_t的10 00 00 00 右邊移動後,是什麼?補0唄,因為大於0

所以所有的位移操作都最好定義為unsigned data

什麼叫邏輯移位和算術移位

1)算術移位 當乘數或除數是2n時,算術移位用來快速地完成對整數進行乘法或除法的運算.算數左移n位相當於乘上2n,執行方法是把原來的數中每一位都向左移動n個位置,左面移出的高位丟棄不要,右面低位空出的位置上全部補0.

2)邏輯移位 邏輯左移n位的執行方法,是把原來的數中每一位都向左移動n個位置,左面移出的高位丟棄不要,右面低位空出的位置上全部補"0".邏輯右移n位的執行方法是把原來數中的每一位都向右移動n個位置,右面移出的低位丟棄不要,左面高位空出的位置上全部補0.

邏輯移位:不考慮正負號

算術移位:考慮正負號.

e g:1000000000000000(右移2位) 0000000000000000(左移2位)

邏輯移位:0010000000000000 0000000000000000

算術移位:1110000000000000 1000000000000000

注:算術右移時,如果被移動的值為負數,補1; 否則,補0.邏輯左移時,補0.

邏輯移位時,不用保留正負號(第乙個),統一補0.

例項分析邏輯移位和算數移位

下面討論整數的移位問題,包括有符號整數和無符號整數的左移和右移,其他情況可作參考。邏輯移位 邏輯左移 向左移位時將左邊移出的高位丟棄,將右邊空出的低位補0 邏輯右移 向右移位時將右邊移出的低位丟棄,將左邊空出的高位補0 算數移位 算數左移 向左移位時將左邊移出的高位丟棄,將右邊空出的低位補0 算數右...

邏輯移位與算術移位

1.邏輯移位 不論是左移還是右移都是直接補0,所有位參與移位。2.算術移位 與邏輯移位的區別在於符號位不參與移位。當為雙符號位時,只有最高符號位才是真符號位,低符號位會參與移位,而如果移位後為01或10,則說明溢位。如補碼1,010 0000左移一位後為1,100 0000。當機器數為正時 無論左移...

算術移位邏輯移位

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