- ベストアンサー
printf で二進表示を行いたい。
すみません。教えていただきたいことがあります。 printf で普通のintの値をフォーマット指定子を使用して二進表示をしたかったのですが見当たりませんでした。 どうにかintの内容を二進で確認したいのですが、どのようにすれば良いですか? 宜しくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
★2進整数を表示する関数を自作すればよい。 ・作り方は簡単で、最上位ビットから順に『0』と『1』を調べていき、ビットが 立っていれば『putchar('1');』にして、ビットが OFF なら『putchar('0');』 にすれば良いでしょう。 ・下にサンプルを載せますので使いやすいように改良して下さい。 サンプル: unsigned int bit = (1 << (sizeof(int) * 8 - 1)); int value = 12345; ←これが表示したい int 型の整数値です。 printf( "value の 2進表記は " ); for ( ; bit != 0 ; bit >>= 1 ){ if ( value & bit ){ putchar('1'); } else{ putchar('0'); } } printf( " です。\n" ); 最後に: ・1バイトが 8 ビットの環境が前提です。→まぁ、普通は 8 ビットですが…。 ・上記のサンプルを関数などにすれば使いやすくなります。→print_bin()など ・以上。おわり。
その他の回答 (4)
- jacta
- ベストアンサー率26% (845/3158)
ちなみに、C++であればstd::bitsetを使えば簡単に2進数にできます。
- sakusaker7
- ベストアンサー率62% (800/1280)
#3の方、「標準」って何を指しておっしゃいますか? たまたまVCとかにあるようなものは「標準」とは普通いわないでしょう。 で、質問者様へ: よくある質問で、C FAQ (日本語訳は http://www.kouno.jp/home/c_faq/ にあります) にも 20.11: 2進数の定数(0b101010のように)を使うことはできるか。2進数用の printf()の書式は存在するか。 A: 2進数の定数は存在しないし、2進数用の書式も存在しない。底2の(2進数)文字列に よる表現をstrtol()を使って整数に変換することは可能である。 ということですので、#3の方のいうitoaがあればそれを使って変換すれば いいでしょうし、 なければ#2の方の例を参考に自作ということになります。
- Interest
- ベストアンサー率31% (207/659)
自作しなくても、標準であるもの使いましょうよ。 自分で作ればバグも作りこむことになります(汗) 例えば itoaを使えば、 #define BUFF_SIZE 100 char buf[BUFF_SIZE]; int a = 20; itoa(a, buf, 2); printf("a=%d を2進数に直すと %s です。\n", a, buf ); これでいけるんじゃないでしょうか。 注意事項としては、itoa は Visual C++ では使えますが、gcc では使えなかったような気がします。 itoa が使えないコンパイラの場合は、(しかたがないので)自作してください。
お礼
ありがとうございます でもgccなんです
- mazimekko3
- ベストアンサー率38% (74/194)
文字列返す関数作ればいいのでは?
お礼
ありがとうございます。 サンプル助かります