ビット計算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