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桁の数、ということだろう。