Shammer's Philosophy

My private adversaria

C言語で2進数を表示させる

Cで書かれたコードの中には、よくシフト演算や論理演算を使用するものがある。しかし、Cにそんなに強くない自分としてはそのようなコードを読んでも理解が難しい。そこで、サンプルのコードを2進数で見てみれば理解しやすくなるのではないか、と考えてprintfで二進数表示させる方法を探したが、、、printf で二進表示を行いたい。 -すみません。教えていただきたいこと- C言語・C++・C# | 教えて!gooによればないらしい。他のサイトでも同様にない、ということを言っている。
上記サイトにサンプルがあったのでそれを自分用に改善。引数で渡された数値を二進数にする、というもの。

#include <stdio.h>

void print_as_b_value(const int value){
  unsigned int bit = (1 << (sizeof(int)*8 - 1));
  int i = 0;
  for( ; bit != 0 ; bit >>= 1, ++i ){
    if( i != 0 && i % 4 == 0 ){
      putchar('.');
    }
    if( value & bit ){
      putchar('1');
    }
    else{
      putchar('0');
    }
  }
  printf("\n");
}

int main(int argc, char *argv[]){
  if ( argc != 2 ){
    printf("Usage: %s value\n", argv[0]);
    return 1;
  }
  print_as_b_value(atoi(argv[1]));
  return 0;
}

最初の1行目のシフト演算がやはりイメージしにくい。1を左にシフト演算しているので、11111111...1という感じの値だろうか。数値としては-2147483648になったから全ビットが1の32桁の数、ということだろう。