シフト演算子は、変数の各ビットを左または右に指定したビット数だけ移動する。移動して範囲からはみだしたビットは消失し、その反対側のビットは 0 で埋められる。
<< | 左シフト |
>> | 右シフト |
シフト演算子の一般的な形式は次のとおり。
値 << ビット数; 値 >> ビット数;
次のプログラムは、左に 1 ビットシフトしたあと、右に 1 ビットシフトしている。元の値には戻らずに、いちばん左のビット(1)が失われているのがわかる。
#include void show_binary(unsigned short u); int main(void) { unsigned short u; u = 45678; show_binary(u); u = u << 1; show_binary(u); u = u >> 1; show_binary(u); return 0; } void show_binary(unsigned short u) { unsigned short n; for (n = 32768; n > 0; n = n / 2) { if (u & n) { printf("1"); } else { printf("0"); } } printf("\n"); }
takatoh@nightschool $ ./sample_11_6 1011001001101110 0110010011011100 0011001001101110