• ベストアンサー

10進数→2進数?

例えば10進で入力された数値を 16進や8進で表示するには%x(%X)、%oを使えばよいのですが、 10進→2進で表示するプログラムをつくるには どうすれば良いのでしょうか? 10進で入力された値をどう計算すればいいか分かりません。

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

  • ベストアンサー
  • Gizensha
  • ベストアンサー率34% (207/608)
回答No.3

すでに的確な回答をいただいていますが、 16進・8進からなら単純な文字列の置換で2進表現ができますね。 # あえてヒントだけ。

komatulong
質問者

お礼

ありがとうございます。 { int a,b,c,d,e,x ; printf("10進数の値:") scanf("%d",&a); b = a%2; c = a/2%2*10; d = a/2/2%2*100; e = a/2/2/2%2*1000; x = b+c+d+e; printf("%dは2進で%d",a,x); } と、こんな感じでいいでしょうか?

その他の回答 (4)

  • okaki0429
  • ベストアンサー率16% (2/12)
回答No.5

#4です。 プログラムにミスがあったので報告しておきます。 >//sizeof(int)<<3 == sizeof(int)*8 == 4byte*8 == 32bit >for (i=sizeof(int)<<3; i >= 0; i--) { >//各ビットが1かどうかを判断 >if (dec&(1<<i)) { この部分ですが i=32のとき、(1<<i)のところで(i<<32)となり、オーバーフローしてしまい、おそらく奇数の値に対しては最上位ビットが常に1になってしまうと思います。 なので、for文の中身を for (i=(sizeof(int)<<3)-1; i >= 0; i--) { if (dec & (1<<i)) { としましょう。 こうすることで、1<<31が最大となり、正しい値が得られるはずです。

  • okaki0429
  • ベストアンサー率16% (2/12)
回答No.4

他の回答者があえてヒントだけというのにコードを書くのはどうかと思いますが・・・。(他の回答者様ごめんなさい) char* dec2bin(int dec, char *bin) { int index=0; //配列の添字用 int i; //sizeof(int)<<3 == sizeof(int)*8 == 4byte*8 == 32bit for (i=sizeof(int)<<3; i >= 0; i--) { //各ビットが1かどうかを判断 if (dec&(1<<i)) { bin[index++] = '1'; } //この条件判定(index!=0)をしなければ32ビット長で配列に入れることになる //条件判定をしたときの例 //1010 //条件判定をしないときの例 //00000000000000000000000000001010 else if (index) { bin[index++] = '0'; } } //最後にヌル文字を追加 bin[index] = '\0'; return bin; } この回答が適切かどうかといえばわかりませんが、これで動くはずです。 基本的にarain様の内容と同じなのですが、使うとしても必ず何をしているかを考え、理解した上で使ってください。 ただこれだけは言っておきます。 使う際、配列の大きさは33以上にしてください。 追申、2進数以外にはこの方法は適応できないので、4進数なども考えて見ましょう! その際はikazuchizoku様の回答が参考になります。

  • arain
  • ベストアンサー率27% (292/1049)
回答No.2

16進数であれ、10進数であれ、PC上では「0」と「1」の羅列でしかありません。 例えば、 10進数で「10」なら、二進数では「1010」になります。 10進数で「7」なら、二進数では「0111」になります。 C言語ですから「ビット」と「バイト」の概念は理解していると思います。 また、「&」や「|」、「>>」「<<」といったビット演算も勉強していると思います。 この「0」と「1」かをビット演算で判断し表示すればできます。 せっかくですので、 >例えば10進で入力された数値を >16進や8進で表示するには%x(%X)、%oを使えばよいのですが、 を「%X」「%o」を使用しないで表示する方法も考えてみてください。

noname#112042
noname#112042
回答No.1

ここのHPに書いてあります

参考URL:
http://www.pursue.ne.jp/jouhousyo/sysad/sysad010.htm
komatulong
質問者

補足

参考URLを見て、改めて2進→10進に変える方法を 考えたら、分かりました。 ありがとうございます。

関連するQ&A

  • 8進数と16進数で表示するプログラム

    int型変数bに10進数として数値を入力し、その値を実行結果のように8進数と16進数で表示するプログラムを作成しなさい という問題にとりかかっているのですが、いまいち理解できません scanfで値を入力させる項目は必要とわかるのですが、その他がどうしてもわかりません、ご教授して頂ければ幸いです

  • C言語プログラムの課題

    大学で以下のような課題が出ました。でも全然わかりません。わかる方がいらっしゃったら、是非教えてほしいです★ 1整数値123を変数iに代入して、iの値を表示するプログラムを作成せよ。 2実数値3.14159を変数xに代入して、xの値を表示するプログラムを作成せよ。 3文字型せーた'A'を変数chに代入して、chの値を表示するプログラムを作成せよ。ただし、chの値を表示する際には、%d,%x,%cの書式を用いること。 4キーボードから入力された2つの整数値i,jの値を画面に表示するプログラムを作成せよ。 5キーボードから2つの整数値を、変数in1とin2に入力して、以下の計算をした結果を画面に表示するプログラムを作成せよ。 in1+in2= in1-in2= in1*in2= in1/in2= in1%in2=

  • Excel関数

    a × b = c という計算式で計算する場合。 a は、変わらず常に一定の数値で b だけを随時変えて入力します。 しかし、計算結果の c の値が一定の数値(xとする)に達すると それ以降は、b に、どんな値を入力しても常に x と表示させたいのです。 例   2 × 6 = 12 2 × 7 = 14 2 × 8 = 16 2 × 9 = 18 2 × 10 = 20 2 × 11 =20 2 × 12 = 20  2 × 13 = 20 どうぞよろしくお願い致します。

  • 初心者です。for文、if文を使って10進数を2進数に変換したいです。

    入力された10進数の数値を2進数に変換する、プログラムを教えてください。 仕様がありまして、2進数を求めるには、入力された10進数の数値を、for文とif文を使用し商が0になるまで2で割り、2進数の値を求め、表示させなければいけません。 ご教授お願いいたします。

  • VB.NETで16進数+16進数や16進数*nをやる方法

    16進数の計算で困っております。 以下のようなプログラムを作ろうと思っています。 入力1:  元の数値:(16進数/型String/例「0000563A」) 入力2:  加算数値:(16進数/型String/例「000001F5」) 入力3:  加算倍率:(10進数/型Integer/例「3」) 結果  入力1+(入力2*入力3)  (結果 16進数/型String/例 00005C19) このようなプログラムを打ちたいのですが、  String=入力1+入力2 とやると、当然ながら「000001F53」と、ただ文字列として追加された計算になってしまいます。 どうやって計算すればよいのでしょうか?

  • 素因数分解プログラムで、5は5と表示するのは?

     練習問題 5-15  2以上の数値を入力し、素因数分解した結果を表示しなさい。 1) int n, x; 2) scanf("%d", &n ); 3) for( x = 2 ; n > 1 ; x++ ){ /*for解説コメントをお願いします。*/ 4) while( ( n % x ) == 0 ){ 5) printf( "%d ", x ); 6) n /= x; } }  以上のプログラムですが、100と入力すると→2 2 5 5と表示されます。  5と入力すると→5と表示されます。どこのプログラムで5は5しか割り切れないと  判断しているのでしょうか?  宜しくお願いします。

  • 入力した数値になるよう組み合わせを計算したい

    A.5~500までの数値を入力 B.1~100までの数値のうち、5つの数値を組み合わせ、Aで入力した値と同様の値となるようにする という計算を行うプログラムを組もうとしているのですが、どういった計算を行えばよいのか分かりません。 ご存知の方いらっしゃいましたらアドバイスお願いします。 ちなみにこれは学校の課題ではありません。個人的な興味です。

  • Excel VBA べき乗について

    Excel VBAでInputBoxを用いて xの値を入力してyの値を計算し、画面に表示するプログラム を書いています。 y=x^2x-x^5-8 なのですが、間違っているようで コンパイルエラー: 補正候補:ステートメントの最後 という表示がでます。 これはどういうことなのでしょうか。 たぶん^2xの部分がおかしいと思うのですが・・。 ここはどのように入力すればいいのですか? わかる方いらっしゃいましたらお願いします。

  • C言語教えてください。

    (1)二次方程式y=a*x*x+b*x+cについて、a=1.0,b=2.0,c=3.0として、x=1.1,2.2,3.3,4.4のときのyをもとめる計算を行い、式と係数値とxと対応するyの値を表示するプログラムを作成せよ。 (2)xを与えて、xの2乗、3乗を計算し、xと対応する結果を表示するプログラムを作成せよ。なお、x=3,5,7,9とする。

  • 16進法での表示

    ある数値を入力して、16進法へ変換するプログラムを作成したく思っています。 "%x"を使用してprintfで変換というのは分かるのですが、いざ記述するとそのままの値で表示されたりしてうまくいきません。 どのように作成すればよいでしょうか? ご教示よろしくお願いします。

専門家に質問してみよう