C C 中的邏輯右移和算術右移

2021-10-05 18:01:49 字數 531 閱讀 4028

邏輯左移和算術左移,都是在右邊補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...