「教えて!ピックアップ」リリース!

すみません。教えていただきたいことがあります。
printf で普通のintの値をフォーマット指定子を使用して二進表示をしたかったのですが見当たりませんでした。
どうにかintの内容を二進で確認したいのですが、どのようにすれば良いですか?
宜しくお願いします。

A 回答 (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()など
・以上。おわり。
    • good
    • 1
この回答へのお礼

ありがとうございます。
サンプル助かります

お礼日時:2007/02/25 21:29

ちなみに、C++であればstd::bitsetを使えば簡単に2進数にできます。

    • good
    • 2

#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の方の例を参考に自作ということになります。
    • good
    • 0

自作しなくても、標準であるもの使いましょうよ。


自分で作ればバグも作りこむことになります(汗)

例えば 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 が使えないコンパイラの場合は、(しかたがないので)自作してください。
    • good
    • 0
この回答へのお礼

ありがとうございます
でもgccなんです

お礼日時:2007/02/25 21:28

文字列返す関数作ればいいのでは?

    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング