- ベストアンサー
【c++】2進数の表示が上手くいきません
サブ関数を利用して、-15~15までの値を1刻みで10進数16進数8進数2進数を表示するプログラムを作っているのですが悩んでいます。 以下のようにやってるのですがデバッグが上手くいきません。 どこが悪いのでしょうか? #include<stdio.h> void sub(int a) { int i,wc; for(i=31;i>=0;i--) { wc=(a>>i)&0x01; if(i%4==3) printf(" "); printf("%1d",wc); } printf("\n"); return; } int main(void) { int wc,a,s,j,b; printf("10進数,16進数,8進数,2進数\n"); for(s=-15;s<=15;s++) { printf("%d %x %o \n",s,s,s); printf("%d\n",sub(a)); } return 0; } 初心者なのでありえない間違えがあるかと思います。 ご教授お願いしますm(_ _)m
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> -15~15までの数を渡す方法が全然わかりません for文で回している変数 s が -15 から +15 まで動いてるのだから、単に for (s = -15; s <= 15; s++) { printf("%d %x %o \n", s, s, s); sub(s); } とするだけですよ。 これがsub()に-15~15の数を渡す方法です。 そして sub() は、あなたが考えた通り、2進数で表示してくれます。 おまけ:main()に宣言されている変数 int wc,a,s,j,b; のうち、main()で使っている変数は s だけですから、 int s; だけで十分です。コンパイラが警告を出してませんでしたか。
その他の回答 (3)
- cyacya2000
- ベストアンサー率54% (39/71)
subは受け取った引数を2進数表示しています。 と言うことはsubには-15~15までの数値を順番に渡せばよいわけです。 変数aは何のための変数化は不明ですが、-15~15の値が入るものではありません。プログラムを眺めれば、どの変数を渡せばよいか解るはずです。 また、sub関数でprintfを用いて2進数を表示していますから、ただ呼ぶだけでよく、 printf("%d\n",sub(a)); などともう一度表示してあげる必要はありません。
お礼
情報提供ありがとうございました。
補足
subの方で2進は計算されているからmainでもう一度表示する必要はないということですか あと、プログラム眺めたのですが、-15~15までの数を渡す方法が全然わかりません...
- asuncion
- ベストアンサー率33% (2127/6289)
#1です。ついでにもう1個。 >void sub(int a) sub関数の戻り値は「ない」と言っているにもかかわらず >printf("%d\n",sub(a)); 出力しているのはおかしいです。
お礼
情報提供ありがとうございました。
補足
ありがとうございます サブで計算した後の printf("%d\n",sub(a));のところはどのように改善すればよろしいでしょうか?
- asuncion
- ベストアンサー率33% (2127/6289)
>for(s=-15;s<=15;s++) >{ >printf("%d %x %o \n",s,s,s); >printf("%d\n",sub(a)); sub関数の引数が、なぜaなのかが全くわかりません。
お礼
解決しました。 mainのほうの宣言は余計でしたね。警告されてました。 情報提供ありがとうございました。