邏輯左移和算術左移,都是在右邊補0,效果一樣。左移1bit,相當於原數 乘以2。
邏輯右移:右移後,左邊補0
算術右移:右移後,左邊補符號位,新增的位與原數的符號位相同,正數(0算作正數的乙個)補0,負數補1。算術右移1bit,相當於原數 除以2。
c/c++中,對於無符號數,可以認為是邏輯左移和邏輯右移。對於有符號數,可以認為是算術左移和算術右移,
要對乙個有符號數 執行邏輯右移,可以先將它強制型別轉換為無符號型別。
要對乙個無符號數 執行算術右移,可以先將它強制型別轉換為有符號型別。
參考:
#include "stdio.h"
int main(int argc, char** ar**)
b = 0xffffffff (-1)
c = 0x7fffffff (2147483647)
e = 0x7fffffff (2147483647)
f = 0xffffffff (-1)
邏輯右移和算術右移
問題描述 在寫嵌入式的程式中,常會將資料定義為unsigned int,這樣定義有什麼好處呢?下面從邏輯右移和算術右移的角度進行分析。分析 1 邏輯右移和算術右移 邏輯右移,移走的位填充為0 算術右移,移走的位填充與符號位有關,例如如果為負數,則移走的位填充為1。2 unsigned int 和 i...
邏輯右移和算術右移
先做兩個小題先。1 unsigned char x 3 x 1是多少?x 1是多少?2 char x 3 x 1是多少?x 1是多少?3 char x 3 x 1是多少?x 1是多少?3寫成二進位制數是00000011 3寫成二進位制數是 補碼 11111101。程式執行的時候,操作的是數值的編碼表...
邏輯右移和算術右移
問題描述 在寫嵌入式的程式中,常會將資料定義為unsigned int,這樣定義有什麼好處呢?下面從邏輯右移和算術右移的角度進行分析。分析 1 邏輯右移和算術右移 邏輯右移,移走的位填充為0 算術右移,移走的位填充與符號位有關,例如如果為負數,則移走的位填充為1。2 unsigned int 和 i...