邏輯移位與算術移位的區別

2021-07-13 17:52:24 字數 603 閱讀 4066

用一句簡單的話來說就是

邏輯移位不需要考慮符號位,算術移位需要考慮符號位,我們都知道。數在計算機中都是以補碼的形式來儲存的,這才造成了邏輯移位和算術移位的的差別。

這學期學習的微控制器,看到的變數宣告一直都是unsigned。這才明白了,為什麼要定義為無符號,因為在程式中可能會用到移位運算。

看個簡單的例子

10000010算術右移1位11000001 (算術移位時符號位不動)

10000010邏輯右移1位01000001

舉個例子:

int funcl(unsigned word)

word  機器數

0080h

00ffh

0100h

對題目進行簡單的改造:

int funcl(unsigned word)

short是一元運算子,《是雙目運算子  單目運算子的優先順序高於雙目運算子,

word  機器數

0080h

00ffh

0000h

int funcl(unsigned word)

word  機器數

0080h

00ffh

0100h

邏輯移位與算術移位的區別

今天在測試程式的時候,發現int型的數右移後得到的結果與自己所想要的不一樣,於是查詢原因,最終發現是邏輯右移與算術右移的問題。系統為32位,以0x80000000 10000000000000000000000000000000 測試。static int shift test void 其輸出結果...

邏輯移位與算術移位

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

算術移位邏輯移位

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