位元左移右移

位元左移運算 (<<), 位元右移運算 (>>)

語法

variable << number_of_bits

variable >> number_of_bits

參數

variable: 任一變數 (byte, int, long)

number_of_bits: 一個小於 32 的整數

範例

int a = 5; // binary: 00000000000000000000000000000101

int b = a << 3; // a二進位、位元往左移3位,binary: 00000000000000000000000000101000, 等於十進制的 40

int c = b >> 3; // b二進位、位元往移3位,binary: 00000000000000000000000000000101, 回到一開始的 5

來看這一題108學年度桃園的考題:輸出結果為何?

int x=1,y=3,z[]={0,1,2,3,4,5,6,7,8};

int *w=z+(x<<y);

printf("%d",*w>>y<<x);

(A)2 (B)4 (C)8 (D)16

分析:

1.宣告了兩個整數x,y,以及一個一維陣列z。

2.又宣告了一個指標變數w,該指標指向z陣列開頭的第8個位置(x<<y)元素的位址。(指標變數存的是位址)

3.(x<<y)是位元左移,0001左移3個位元、變成1000=8。

4.列印經過了兩次的位元移動,第一次*w>>y,8的二進位向右移動3個位元變成0001,再將0001向左移動1個位元(<<x),最後變成0010,等於十進位的2。