thisdesuのブログ

C言語はじめました

にほんブログ村 IT技術ブログ C/C++へ

ビット計算2

ビットを扱うときに、0と1で表示したいなーと誰もが思うはず。たぶん。きっと。かな。。
ここで良くググると見つかる、2進数を表示する関数を書いてみました。

関数[_print]です。1byte(8bit)限定ですです。
予め8bit目が1の値(msk)を用意して(10進数で128)。指定値(val)とmskと論理積(AND)すると、1になるか0になるかを判断して結果をprintfします。
そしてmskの値を1bitつづシフト(>>)して全ビット(8bit)分繰り返します。

#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;
    for(i=0;i<32;i++){
    printf("%2d:",i);
    _print(i);printf("\n");
    }
}


実行

$ gcc main.c
$ ./a.out
 0:00000000
 1:00000001
 2:00000010
 3:00000011
 4:00000100
 5:00000101
 6:00000110
 7:00000111
 8:00001000
 9:00001001
10:00001010
11:00001011
12:00001100
13:00001101
14:00001110
15:00001111
16:00010000
17:00010001
18:00010010
19:00010011
20:00010100
21:00010101
22:00010110
23:00010111
24:00011000
25:00011001
26:00011010
27:00011011
28:00011100
29:00011101
30:00011110
31:00011111