C 移位運算

2021-09-24 18:28:12 字數 1025 閱讀 4906

移位運算分為左移(<>),其中右移又分為邏輯右移與算術右移。三者實現如下:

(1)左移:移出去的位丟棄,空缺位(vacant bit)用 0 填充;

(2)邏輯右移:移出去的位丟棄,空缺位(vacant bit)用 0 填充;

(3)算術右位:移出去的位丟棄,空缺位(vacant bit)用符號位來填充。

以補碼 0x10110011 來演示左移、邏輯右移與算術右移。

左移:

邏輯右移:

算術右移:

移位算只能作用於整數,不能作用於浮點數。對於無符號整數與有符號整數,左移操作相同,但右移稍有區別。

(1)對於無符號整數為邏輯右移;

(2)對於有符號整數為算術右移。

注意, 對於無符號整數,右移必須是邏輯右移。而對於有符號整數,c 語言標準並沒有明確定義應該使用哪種型別的右移,但幾乎所有的編譯器均採用算術右移。

//

//@file: main.c

//#include #include int main()

編譯輸出結果:

gcc main.c

./a.out

a=0xffffffff

a<<1=0xfffffffe

a>>2=0xffffffff

b=0x00000001

b<<1=0x00000002

b>>1=0x00000000

[1] 龔奕利,賀蓮譯.深入理解計算機系統[m].北京:機械工業出版社,2016-11.c2.1.9 c語言中的移位運算.p40-41

1204 移位運算(C)

無符號短整數關鍵字為 unsigned short 無符號短整數長為2位元組,16位,最左邊 最高位 下標為15,最右邊 最低位 下標為0 從第m位向左數n位,取出作為新數的最高位,右邊補零 無符號短整數輸入輸出格式為 hu 多組輸入。將x向右移動m位,再向左移動16 n位。輸入 12345 10 ...

1204 移位運算(C)

無符號短整數關鍵字為 unsigned short 無符號短整數長為2位元組,16位,最左邊 最高位 下標為15,最右邊 最低位 下標為0 從第m位向左數n位,取出作為新數的最高位,右邊補零 無符號短整數輸入輸出格式為 hu 多組輸入。將x向右移動m位,再向左移動16 n位。輸入 12345 10 ...

C 移位運算子

int result1 66 1 正數的左移位運算規則,左移一位乘以2,右移移位除以2 左移兩位乘以4,三位乘以8,4位乘以16,右移則相反 int result2 66 1 負數的移位運算在最高位補1 運算規則和正數一樣 console.writeline 正數移位 result1 負數移位 re...