位元左移右移
位元左移運算 (<<), 位元右移運算 (>>)
位元左移運算 (<<), 位元右移運算 (>>)
語法
語法
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。