シフト演算子

シフト演算子は、変数の各ビットを左または右に指定したビット数だけ移動する。移動して範囲からはみだしたビットは消失し、その反対側のビットは 0 で埋められる。

<<左シフト
>>右シフト

シフト演算子の一般的な形式は次のとおり。

値 << ビット数;
値 >> ビット数;

次のプログラムは、左に 1 ビットシフトしたあと、右に 1 ビットシフトしている。元の値には戻らずに、いちばん左のビット(1)が失われているのがわかる。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#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");
}
#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"); }
#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