シフト演算子

シフト演算子は、変数の各ビットを左または右に指定したビット数だけ移動する。移動して範囲からはみだしたビットは消失し、その反対側のビットは 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