用一句簡單的話來說就是
邏輯移位不需要考慮符號位,算術移位需要考慮符號位,我們都知道。數在計算機中都是以補碼的形式來儲存的,這才造成了邏輯移位和算術移位的的差別。
這學期學習的微控制器,看到的變數宣告一直都是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進行補充,但必須確保符號位不改變。邏輯移位是指邏輯左移和邏輯...