- ベストアンサー
10進数を2進数に変換するには・・・
前にも質問された方がいらっしゃるかもしれないですが検索してもわからなかったのでお願いします。 C言語で10進数を2進数に変換するためにはprintf文を使用して表すことはできないですよね?どうすればよいですか? 例えば10進数である214を2進数の11010110というのに変換したい場合プログラムではどのようになるのでしょうか? 基本的なことですみませんがお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#3のttyp03さんが紹介しているものと考え方は同じなので、書こうかどうか迷ったのですが、一応別アイディアをいれて書いてみました。 #include <stdio.h> #include <limits.h> #define MAXBIT sizeof(src) * CHAR_BIT int main() { char src=214; char dst[MAXBIT + 1]; int i, startbit; for(i = 0; i < MAXBIT; i++) { if(src & (1 << i)) { dst[MAXBIT - i - 1] = '1'; startbit = MAXBIT - i - 1; } else { dst[MAXBIT - i - 1] = '0'; } } dst[MAXBIT]='\0'; printf("%s\n", dst); printf("%s\n", dst + startbit); return 0; } 0サプレスありと0サプレスなしの機能および変数の型から自動的に桁数を計算するように実装してみました。 あと、インデントは全角でやってあるので、そのままコピペしちゃだめです。
その他の回答 (3)
- lailai2580
- ベストアンサー率64% (16/25)
2で割って余りから2進数を求める方法をとりました。 初歩的な標準ライブラリ関数しか知らないので、そのままの手順で書いてみました。 #include <stdio.h> #include <stdlib.h> #define MAX 100 int main() { int decimal, i, tmp; int binary[MAX]; printf("10進数で入力して下さい: "); scanf("%d", &decimal); tmp = decimal; /* いらないかもしれないけど初期化 */ for(i = 0; i < MAX; i++) binary[i] = 0; /* 2進数の計算 */ i = 0; while(1) { /* 配列binaryに代入できる上限を超えたら強制終了 */ if(i == MAX) { printf("表示制限を超えました\n"); exit(1); } binary[i] = tmp % 2; tmp = tmp / 2; if(tmp == 0) break; i++; } /* 逆順に表示することで2進数を表示 */ printf("%dを2進数で表すと\n", decimal); for(; i >= 0; i--) printf("%d", binary[i]); printf("\nになります\n"); return 0; }
お礼
w( ̄o ̄)w オオー!なるほど。ありがとうございます。 10進数を2で割った余りを逆順に表示すればいいんですね。 コメント文で行っている処理も書いてくれてわかりやすいです。 参考にさせていただきます。
- ttyp03
- ベストアンサー率28% (277/960)
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1570137 こちらに僕が以前回答したプログラムが掲載してあります。 #5です。 参考にしてください。 一応解説しておきます。 10進数を2進数に変換、という言葉自体がおかしいです。 例えばint型の値は10進数でもあり2進数でもあるわけです。 ですから変換というよりは表示の仕方になります。 上記URLに掲載したソースはint型の数値の各ビットを頭から表示しているにすぎません。
お礼
ありがとうございます。 そういえば掲載してあるページも見た覚えがあります。 是非参考にさせていただきますペコリ(o_ _)o)) なるほど。変換という表現はおかしいんですね。 表示と言えばいいんですね。 解説もありがとうございます。 掲載されているのを参考に勉強させていただきます。 ありがとうございました。
- xcrOSgS2wY
- ベストアンサー率50% (1006/1985)
この質問の上のほうにある検索ボックスに「2進数」と入れて検索すると127件(現在時点)出てきます。参考になるのではないでしょうか。 ついでに、検索システム構築のときの参考になりそうなので、どんな検索を行ったのかも知りたいです。
お礼
ありがとうございます。
補足
xcrOSgS2wYさんがおっしゃってた通り、2進数などと検索して探してみました。 C++のプログラムは見つかりましたがCのほうが見つからなくて…。 そして10進数の数を2で割っていって、その余りを右詰めにすることで2進数で表すことができるということが書いてありました。 検索では『2進数 10進数 変換』など絞込み検索もしました。←こんな感じでいいんですか?
お礼
ありがとうございます。 ttyp03さんと同じ考え方なのですね。 難しそうですがよく考えて参考にさせていただきます。 rentahiroさんのアイデアで書いていただいてありがとうございます。