• ベストアンサー

printf で二進表示を行いたい。

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

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★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()など ・以上。おわり。

psychesine
質問者

お礼

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

その他の回答 (4)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.5

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

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.4

#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)
回答No.3

自作しなくても、標準であるもの使いましょうよ。 自分で作ればバグも作りこむことになります(汗) 例えば 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 が使えないコンパイラの場合は、(しかたがないので)自作してください。

psychesine
質問者

お礼

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

回答No.1

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

関連するQ&A

  • printf("%d",func())はなぜ実行できないのか?

    main(){ int i; i = func(); printf("%d",i); } int func(){ return 1; } はちゃんと1が表示されるのになぜ、 main(){ printf("%d",func()); } int func(){ return 1; } は1が表示されず変な値になってしまうんでしょうか? funcのアドレスが表示されているんでしょうか? よろしくお願い致します。

  • printf() だけで文字列を表示できる??

    1: int printf(char *, ...); 2: main() 3: { 4: printf("Hello, world.\n"); 5: } C で書かれた上のプログラムが正常にコンパイルでき、しかもHello, world. と表示することが理解できません。どなたか教えていただけないでしょうか。 1行目でprintf のプロトタイプ宣言を書き、その実体は書いていません。これをコンパイルしたとき、「printf() は知らない」と言われると思いましたが、そうはならず、Hello, world. を表示しました。 また、1行目の関数宣言の引数を変更すると、「ビルトイン関数と型が一致しない」と言われます。その「ビルトイン関数」というのは文字通りビルトインされていて任意に使用できるようになっているのでしょうか。 コンパイラはgcc version 3.4.4 です。

  • 値を変数に代入してprintfで表示しようとしてもうまくいきません

    値を変数に代入して、printfで表示しようとしてもうまくいきません。 ソースのどこが悪いか教えていただけないでしょうか? 変数の値を1個ずつ表示する場合は、正常になります。 問題は、1行で表示する場合に1個目の値は出るのですが正常な表示にはなりません。 //ソース開始 #include <stdio.h> #include <windows.h> int main() { LARGE_INTEGER i64,h64; LONGLONG work,h,m,s; QueryPerformanceCounter(&i64); QueryPerformanceFrequency(&h64); //起動時間をミリ秒取得 work = i64.QuadPart*1000 / h64.QuadPart; //時間をhに入れる h = work / 1000 / 3600; //分をmに入れる m = (work / 1000 - h * 3600) / 60; //秒をsに入れる s = work / 1000 - h * 3600 - m * 60; //表示 printf("%d時間%02d分%02d秒\n",h,m,s); printf("%d時間\n",h); printf("%d分\n",m); printf("%d秒\n",s); printf("%d秒\n",work); return 0; } //ソースここまで //実行結果 289時間00分55秒 289時間 55分 54秒 1043754590秒 続行するには何かキーを押してください . . . //理想の表示結果 1行目が以下のようになってほしい 289時間55分54秒

  • アドレスの表示

    現在ポインタを勉強していて気になったのですが 下記のようにすると、nxとnyのアドレスが表示されるのですが ここで指定子を%dにした場合は、どいういう意味の値が 出力されるのでしょうか? #include <stdio.h> void main() { int nx = 15; int ny = 73; printf("nxのアドレス=%p\n",&nx); //ここを指定子を%d printf("nyのアドレス=%d\n",&ny); //ここを指定子を%d }

  • printfで・・

    ループの途中でカウンタのモニタ表示を したいのですが、改行したりせずに、プロンプト上に 上書きして表示させるにはどのようにしたら良いのでしょうか?ご存知の方教えてください<(_ _)> たとえば、以下のようにしてしまうと 1000行書き出されてしまいますよね。 %dのところだけ上書きして表示したいのですが可能でしょうか? int i,cnt; cnt =0; for(i=0;i<1000;i++){ printf("cnt = %d\n",cnt); }

  • printfですぐに出力

    バッファ関係の質問です。 printfの直後にprintfの内容を表示する方法を教えてください。

  • printf()がないとエラー

    現在、素因数分解プログラムを作っていて値を確認するために使って いたprintf()を取り除いて完成というところだったのですが、50の 倍数のときにセグメントエラーになり、再びprintf()を付け加えると 正常に動作するという不可解な現象が起きました。 こんな場合は、どんなことが起きていると考えられますか? そして、1回も使ったことがないのでよくわかりませんが、デバッガ を使えば原因がわかるものでしょうか? 回答よろしくお願いします。

  • PICのprintfで5桁の整数を表示させたい

    PIC 16F688、mplab xc8を使っています。 LCDにprintfで5桁の整数を表示させたいのですが、65536以上はうまく表示できません。 5桁で99999を表示させるにはどうすればいいでしょうか? 例えば、このように書くと99999以上の数字が表示されてしまいますが、65535までは正常に表示されます。また、0も5桁で正常に表示されています。 unsigned short long a; a=99999; printf("%05.5lu",a); SLEEP(); printfの%lが悪いのか、%uが悪いのか、他の指定が有るのか分かりません。

  • printfするのとしないのとで実行結果が異なる

    現在、ようやくC言語にも慣れてきてソースが自力で書けるようになってきた者です。ところが、ちょっとした問題に悩んでいます。 当該ソースは以下のとおりです。 #include<stdio.h> int main(void){ #define NINZU 5 int i,j,k,temp,va[NINZU]; for(i=0;i<NINZU;i++){ printf("va[%d]=",i); scanf("%d",&va[i]); } for(j=0;j<NINZU;j++){ for(k=0;k<NINZU;k++){ if(va[k]<va[(k+1)]){ printf("比較材料 %d\n",va[k]); printf("比較相手 %d\n",va[(k+1)]); temp=va[k]; va[k]=va[(k+1)]; va[(k+1)]=temp; } } } printf("1番の人 : %d\n",va[0]); printf("2番の人 : %d\n",va[1]); return 0; } 簡単なソースで、入力された5個の数値を並び替え1位と2位を表示するというものなのですが、実行結果が、「比較材料・比較相手」というprintfを外すと、「1番の人」の表示がどんな値を入力しても1245056になってしまいます。 printfが入っていれば正常に表示されるのですが… 大至急、知りたいです!!!

  • printfが後で実行されます。

    最近、プログラミングを始めた初心者です。 エクリプスを使い、次のようなプログラムを作ったのですが、 実行結果が思いと違うのです。 #include<stdio.h> int main(void) { int i, dt; printf("数値を入力:"); scanf("%d", &dt); i = 2; while(dt != 1) { while(dt % i == 0) { dt = dt / i; printf("%d\n", i); } i ++; } return 0; } 実行結果 60 数値を入力:2 2 3 5 数値を入力:の後に、scanfで入力したいのですが、 入力したあとでないと、printfの内容が表示されないのです。 コードは大丈夫だと思うのですが、、、 初心者なので、何をどうすれば解決するのか検討もつきません。 どなたかお分かりになる方、よろしくお願いいたします。