ビット演算子

 お待たせしました。C言語でどのようにビット演算を行うかについて説明します。使う機会は少ないかもしれませんが、「こういう命令もある」という感覚で覚えておくと良いと思います。

 では、以下のプログラムを書いて実行してみて下さい。

#include <stdio.h>

int main(int argc, const char * argv[])
{
    
    // insert code here...
    int a = 11;
    
    // 左にシフト
    a = a << 1;
    printf("a = %d\n", a);
    
    // 右にシフト
    a = a >> 1;
    printf("a = %d\n", a);
    
    a = a << 2;
    printf("a = %d\n", a);
    
    a = a >> 2;
    printf("a = %d\n", a);
    
    a = a << 3;
    printf("a = %d\n", a);
    
    a = a >> 3;
    printf("a = %d\n", a);
    
    return 0;
}

 結果は、以下のようになります。

a = 22
a = 11
a = 44
a = 11
a = 88
a = 11

 「<<」と「>>」はシフト演算とも呼ばれています。11を2進数に直すと「00001011」。「a = a << 1;」は、「00001011」を左に1桁ずつずらします(一番右には0を埋めます)。そうすると「00010110」で、10進数に直すと「22」。その22を「>> 1」で右に1桁ずらして元に戻します。同様に、2桁左にずらしたら「00101100」で10進数で言えば44、それを元に戻して、3桁左にずらして「01011000」で10進数に直すと88、そして、また元に戻しています。

 ビット演算はシフト演算の他にも、2進数の数を上下に並べて、同じ桁のものを1にする等の演算があります。「AND」という演算で「&」を使います。その他、「OR」という演算子「|」、「XOR」という演算子「^」、1と0を反転させる「~」という演算があります。シフト演算以上に使う機会が殆どないと思うので説明は省きます。興味ある方はGoogle等で検索されることをおすすめします。

 ビット演算の話は以上です。

■スポンサーリンク

このページの先頭へ