C
bit
ビット
変数

変数のビット配列をみるコード

変数のビット配列を見てみたいと思い書いた。

書いてみたコードonGist

print_bits.c(主要関数部)
#include <stdio.h>

void printbits(unsigned char v) {
        int i; // for C89 compatability
        for(i = 7; i >= 0; i--) putchar('0' + ((v >> i) & 1));
}

void printbits_int(int v) {//for 32bit variable
        int i,j;
        for(i=8*sizeof(int)-1; i >= 0; ) {
                for(j=4; j>0; j--) {
                        putchar('0' + ((v >> i) & 1));
                        i--;
                }
                putchar(' ');
        }
}
実行結果
$ gcc print_bits.c -o printbits
$ ls
printbit.exe  printbits.c
$ ./printbit.exe
This program enable you to see bit of variable.
Ener one character you want see its bit(= ascii code).
R
01010010
Ener variable(int) you want see its bit.
43690
1010 1010 1010 1010

しくみ

1.ビットシフトで1ビットずつビットAND演算

変数vの中身を一番左端から0なのか1なのか見ていきます。

ビットの中身が0なら((v >> i) & 1)は0b00...000(=0)に、1なら0b00..001(=1)になります。(「0b」はビット表現の意味です。)

//char v='z' z=0b01111010
((v >> 7) & 0b00000001)//=0 先頭ビットは0
((v >> 6) & 0b00000001)//=1 次のビットは1
...

2.「0」の文字コードに0か1を加えて「0」か「1」を出力

putchar('0')で当然0を出力するわけですが、その'0'に1を加えると'1'を表す文字コードになることを利用します。

putchar('0' + 1);//"1"
putchar('0' + 0);//"0"
putchar('a' + 1);//"b"