アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

言語が関係あるか解りませんがC言語しか使えません。

A 回答 (4件)

こんにちは、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を二進で表した数字になります。  
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2002/02/16 13:33

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ビット区切りのビット列にすれば、それが答えです。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2002/02/16 13:31

10進→2進変換を書き忘れてたので追加。


printf() でできれば良いんだけど、多分ないと思う。

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

n が32ビットの整数の場合。
int i;
for (i = 0; i < 32; i++, n <<= 1)
 putchar((n & 0x80000000) ? '1' : '0');putchar('\n');
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2002/02/16 13:33

CでもC++でもstrtol() が使えると思う。



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

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

ありがとうございました。

お礼日時:2002/02/16 13:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!