ビットシフト
名前のとおりビット単位で全bitをシフトします。右(小さく)へシフトさせる場合に[>>]を、左(大きく)へシフトさせる場合には[<<]を指定します。
ビット幅を超えたbitはなくなります。逆に出現したら(逆側から出てきたbit)0です。
#include <stdio.h> void _print(unsigned char val) { unsigned char msk = 128; // 10000000 for( ; msk; msk >>= 1) { if ( val & msk ) putchar('1'); else putchar('0'); } } int main() { unsigned short i=1; i = 3; printf("%2d:",i);_print(i);printf("\n"); // 左へ1bitシフト i <<= 1; printf("%2d:",i);_print(i);printf("\n"); // 左へ1bitシフト i <<= 1; printf("%2d:",i);_print(i);printf("\n"); // 右へ2bitシフト i >>= 2; printf("%2d:",i);_print(i);printf("\n"); // シフトして1が1つ消えます。 i >>= 1; printf("%2d:",i);_print(i);printf("\n"); // シフトして全部消えます。 i >>= 1; printf("%2d:",i);_print(i);printf("\n"); // 0からシフトしても0が出てくるだけで、0です i <<= 1; printf("%2d:",i);_print(i);printf("\n"); }
結果
$ gcc main.c $ ./a.out 3:00000011 6:00000110 12:00001100 3:00000011 1:00000001 0:00000000 0:00000000