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

2021-10-01 06:41:17 字數 1405 閱讀 4037

下面討論整數的移位問題,包括有符號整數和無符號整數的左移和右移,其他情況可作參考。

邏輯移位:

邏輯左移:向左移位時將左邊移出的高位丟棄,將右邊空出的低位補0

邏輯右移:向右移位時將右邊移出的低位丟棄,將左邊空出的高位補0

算數移位:

算數左移:向左移位時將左邊移出的高位丟棄,將右邊空出的低位補0

算數右移:向右移位時將右邊移出的低位丟棄,將左邊空出的高位補0,最高位上保留符號位

#include

"stdio.h"

intmain()

輸出為:

positive_sleft =

20negative_sleft =-20

unsigned_sleft =

20positive_sright =

5negative_sright =-5

unsigned_sright =

5請按任意鍵繼續.

..

彙編指令中,

shl:邏輯左移,

shr:邏輯右移,

sal:算術左移,

sar:算術右移,

上述原始碼的彙編**為

#include

"stdio.h"

intmain()

000814c7 pop edi

000814c8 pop esi

000814c9 pop ebx

000814ca add esp,

12ch

000814d0 cmp ebp,esp

000814d2 call __rtc_checkesp (

081136h)

000814d7 mov esp,ebp

000814d9 pop ebp

000814da ret

左移:有符號整數和無符號整數的左移都是邏輯左移

右移:有符號整數的右移是算數右移,無符號整數的右移是邏輯右移

有符號整數:左移是邏輯移位,右移是算數移位

無符號整數:左移和右移都是邏輯移位

左移:邏輯

右移:有符號:算數,無符號:邏輯

算數移位 , 與邏輯移位

是算數移位,也就是 1,如果右移,則 最高位補1 左移,則右邊補0 但是uint32 t的10 00 00 00 右邊移動後,是什麼?補0唄,因為大於0 所以所有的位移操作都最好定義為unsigned data 什麼叫邏輯移位和算術移位 1 算術移位 當乘數或除數是2n時,算術移位用來快速地完成對整...

算術移位和邏輯移位

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

算術移位和邏輯移位

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