LoginSignup
1
0

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-12-12

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

書いてみたコード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"

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0