C語言中按位左移的運算子為<<,其規則如下:
對於操作a<<n,
1 按照二進位制值每位向高位(書寫上是向左)移動n位;
2 最高位(最左邊的)n位捨去;
3 最低位(最右邊)填加n個0.
簡單起見,用char型舉例如下:
例一
0x12 << 3 =>
B00010010 << 3 =>
B10010 000(這裡最高位的三個0被捨去,其它依次左移,最低位補三個0) =>
0x90
即0x12 << 3 = 0x90
例二
0x9E << 2 =>
B10011110 << 2 =>
B01111000 (最高位10捨去,最低位補兩個0)=>
0x78
可以編寫如下程式驗證:
#include <stdio.h>void check(char a, int n){ printf("0x%hhx << %d = 0x%hhx\n", a, n, a<<n);}int main(){ check(0x12, 3); check(0x9e, 2); return 0;}
其執行結果為
0x12 << 3 = 0x900x9e << 2 = 0x78
可以看到與我們計算結果是相符的。
C語言中按位左移的運算子為<<,其規則如下:
對於操作a<<n,
1 按照二進位制值每位向高位(書寫上是向左)移動n位;
2 最高位(最左邊的)n位捨去;
3 最低位(最右邊)填加n個0.
簡單起見,用char型舉例如下:
例一
0x12 << 3 =>
B00010010 << 3 =>
B10010 000(這裡最高位的三個0被捨去,其它依次左移,最低位補三個0) =>
0x90
即0x12 << 3 = 0x90
例二
0x9E << 2 =>
B10011110 << 2 =>
B01111000 (最高位10捨去,最低位補兩個0)=>
0x78
可以編寫如下程式驗證:
#include <stdio.h>void check(char a, int n){ printf("0x%hhx << %d = 0x%hhx\n", a, n, a<<n);}int main(){ check(0x12, 3); check(0x9e, 2); return 0;}
其執行結果為
0x12 << 3 = 0x900x9e << 2 = 0x78
可以看到與我們計算結果是相符的。