OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

2進数を10進数にする方法

  • 困ってます
  • 質問No.214585
  • 閲覧数395
  • ありがとう数6
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 58% (109/185)

2進数を10進数にする。
またその逆の10進数を2進数にした時の値の2つが
知りたいのです。
00010100だと10進数では20になりますよね。
この位なら、良いのですけど、
11010110見たいに複雑になってくると解りません。

言語が関係あるか解りませんがC言語しか使えません。
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2
レベル7

ベストアンサー率 18% (5/27)

こんにちは、su-zy-kiともうします。
2進を10進に、またその逆をおこなうプログラムを作りたいのでしょうか?
それとも、紙と鉛筆による方法が知りたいのでしょうか?
私は、プログラムに関する知識があまりないのでプログラムに関しては答えられませんが自分で計算する方法でよろしければわかります。

まず2進から10進ですが、たとえば(11010110)の場合ですと

       128 64 32 16 8  4  2  1
左から順に(1  1  0  1  0  1  1  0)
という感じで上に1、2、4・・・・数字を振っていきます。
次に2進で1の所の数字を足していきます。
2+4+16+64+128
これを計算すると214になります。
これが2進数の(11010110)を10進数で表した数字です。

10進を2進にする方法ですが、214を2進数にするときは、
214を2で割ります。
割り切れるので2進数の一番左は0になります
214を2で割った数107を2で割ると割り切れないので2進の次の数字は1になります。こんな感じで計算します
               
214 ÷ 2 = 107 ・・・ 0
107 ÷ 2 = 53  ・・・ 1
53  ÷ 2 = 26  ・・・ 1
26  ÷ 2 = 13  ・・・ 0
13  ÷ 2 = 6   ・・・ 1
6   ÷ 2 = 3   ・・・ 0
3   ÷ 2 = 1   ・・・ 1
1   ÷ 2 = 0   ・・・ 1
割り算のあまりを並べると(11010110)になりこれが214を二進で表した数字になります。  
お礼コメント
yosiyosi

お礼率 58% (109/185)

ありがとうございました。
投稿日時 - 2002-02-16 13:33:41
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.1
レベル10

ベストアンサー率 23% (43/184)

CでもC++でもstrtol() が使えると思う。 例) long n = strtol("101101110101011", NULL, 2); こんな感じで long の変数に入れたあとで printf("%ld\n", n); のようにすると10進数として出力される。 詳細は UNIX 系 OS の場合は man strtol で見て。 (W ...続きを読む
CでもC++でもstrtol() が使えると思う。

例)
long n = strtol("101101110101011", NULL, 2);

こんな感じで long の変数に入れたあとで printf("%ld\n", n); のようにすると10進数として出力される。
詳細は UNIX 系 OS の場合は man strtol で見て。
(Windows の場合はコンパイラ付属のヘルプに入ってると思う)
C言語の入門書とかにも書いてあると思う。
お礼コメント
yosiyosi

お礼率 58% (109/185)

ありがとうございました。
投稿日時 - 2002-02-16 13:34:33


  • 回答No.3
レベル10

ベストアンサー率 23% (43/184)

10進→2進変換を書き忘れてたので追加。 printf() でできれば良いんだけど、多分ないと思う。 で、色々方法はあるが、こんな風にしちゃえば良いんじゃないだろうか。 n が32ビットの整数の場合。 int i; for (i = 0; i < 32; i++, n <<= 1)  putchar((n & 0x80000000) ? '1 ...続きを読む
10進→2進変換を書き忘れてたので追加。
printf() でできれば良いんだけど、多分ないと思う。

で、色々方法はあるが、こんな風にしちゃえば良いんじゃないだろうか。

n が32ビットの整数の場合。
int i;
for (i = 0; i < 32; i++, n <<= 1)
 putchar((n & 0x80000000) ? '1' : '0');putchar('\n');
お礼コメント
yosiyosi

お礼率 58% (109/185)

ありがとうございました。
投稿日時 - 2002-02-16 13:33:04
  • 回答No.4
レベル14

ベストアンサー率 30% (2593/8599)

NO.2で回答されている方法がオーソドックスです。 ただ、質問者は20位の数字なら即座に変換できるようなので、16進数を仲介する方法がいいと思います。(4ビットづつ区切ります) 「1101 0100」は16進数で「13 4」(本当は13でなく「D」)ですがこれから 13×16+4=208+4=212 という風に求められます。 重みは、下から、1、16、256、4096、と言う風になります。 ...続きを読む
NO.2で回答されている方法がオーソドックスです。

ただ、質問者は20位の数字なら即座に変換できるようなので、16進数を仲介する方法がいいと思います。(4ビットづつ区切ります)
「1101 0100」は16進数で「13 4」(本当は13でなく「D」)ですがこれから 13×16+4=208+4=212 という風に求められます。
重みは、下から、1、16、256、4096、と言う風になります。

10進数から2進数への変換は、2の代わりに16を使って割り算をしていきます。方法は、NO.2を参考にしてください。これで出た、16進数の並びを4ビット区切りのビット列にすれば、それが答えです。
お礼コメント
yosiyosi

お礼率 58% (109/185)

ありがとうございました。
投稿日時 - 2002-02-16 13:31:57
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ