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

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

このQ&Aに関連する最新のQ&A

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に関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q10進数と2進数の少数の違いについて

10進数の0.1は 1/10 から計算できますが

2進数の0.1の10進法表記は1/2^1で計算して 0.5 ですよね。

整数の場合、10進数も2進数も例えば 1 の大きさはかわらないのに

なぜ少数になると大きさが2進数と10進数で変わってしまうのでしょうか?

 

Aベストアンサー

> 整数の場合、10進数も2進数も例えば 1 の大きさはかわらないのに
> なぜ少数になると大きさが2進数と10進数で変わってしまうのでしょうか?

例えに1を持ってくるから変なのでは?


2進数の10
10進数の10
の大きさが違う理由は説明できますか?

それと同じ理由になると思います。

QC言語 2次方程式を解くプログラムについて

 学校でC言語を使って、実数解をもつ簡単な2次方程式を解くプログラムを作れという課題がでました。まだ初心者で何をどうしたらいいかわからない状態です。簡単なプログラムを作ってくださいm(__)m

Aベストアンサー

2次方程式の根と係数の関係を知っているでしょう ?
それを使えばいいのではないの ?
他人にプログラム作成を依頼すると色々と高くつきますよ。

Q2進数→10進数

(1)2進数の0.101を10進数に
(2)2進数の1001.01を10進数に

解き方が全くわかりません。
どなたかよろしくお願いします。

Aベストアンサー

こんばんは。

たとえば、
1011 という2進数があるとき、
8の位が1
4の位が0
2の位が1
1の位が1
と考えます。
ですから、1011(2進数)= 8+2+1(10進数) です。
そして、位が1つ下に行くにしたがって、半分になるのですから、
小数点以下は、0.5の位、0.25の位、0.125の位・・・となっていくわけです。
私はこのことを説明するとき、よく
8円玉、4円玉、2円玉、1円玉、0.5円玉、0.25円玉、0.125円玉・・・
というふうに例えます。


(1)は、0.5円玉1枚、0.125円玉1枚なので、
0.5+0.125
です。

こう言われてみると、簡単でしょ?


以上、ご参考になりましたら幸いです。

Qn進数を10進数に変換するプログラムがわかりません

整数n(2<=n<=16)とn進数の数字列digitsを与えると10進数に変換して表示するプログラム
関数void base2dec(int n, string digits, int &dec)を使用する

実行例 110101(2)=53
123(8)=83
7ACE(16)=31438
以下はとりあえずつくったみたプログラムです
#include<iostream>
#include<string>
using namespace std;
void base2dec(int n, string digits, int &dec)
{
int i,x=0;
for(i=0; i=digits.size()-1; i++)
{
if(n<10)
{
x=digits[i]-'0';
}
else
{
x=digits[i]-'A'+10;
}
dec=(x*n);
if(cin >> digits[i++])
{
if(n<10)
{
dec=dec+(digits[i++]-'0');
}
else
{
dec=dec+(digits[i++]-'A'+10);
}
}
}
int value = dec;
}

int main()
{
int n,value;
string digits;
cout << "何進数ですか-->";
cin >>n;
cout << "数字列を入力してください-->";
cin >>digits;;
base2dec(n,digits,value);
cout << digits << "(" << n << ")=" << value << endl;
return 0;
}

void関数の中、特に計算方法が間違っていると思うのですが、なにがいけないかわかりません。ちなみにn進数から10進数に直す方法は理解しています。

整数n(2<=n<=16)とn進数の数字列digitsを与えると10進数に変換して表示するプログラム
関数void base2dec(int n, string digits, int &dec)を使用する

実行例 110101(2)=53
123(8)=83
7ACE(16)=31438
以下はとりあえずつくったみたプログラムです
#include<iostream>
#include<string>
using namespace std;
void base2dec(int n, string digits, int &dec)
{
int i,x=0;
for(i=0; i=digits.size()-1; i++)
{
if(n<10)
{
x=digits[i]-'0';
}
else
{
...続きを読む

Aベストアンサー

★アドバイス
>for(i=0; i=digits.size()-1; i++){
 ↑
 この行がおかしいです。
 間違い⇒for(i=0; i=digits.size()-1; i++){
 正しい1⇒for(i=0; i<=digits.size()-1; i++){
 正しい2⇒for(i=0; i<digits.size(); i++){
 ※回答者 No.1 さんのアドバイス通りです。
>void関数の中、特に計算方法が間違っていると思うのですが、なにがいけないかわかりません。
 ↑
 『dec=(x*n);』ここが違う気がします。
 『dec=(dec*n+x);』とすればいいと思いますけど。
>ちなみにn進数から10進数に直す方法は理解しています。
 ↑
 理解しているのなら『dec=(dec*n+x);』となると思いますが…。

その他:
>if(cin >> digits[i++]){ … }
 ↑
 このifブロック内は必要なのか?
 どういう意味。
>int value = dec;
 ↑
 最後のこの行は意味ないね。
 『value』を参照してないし。
 戻してないし。
 そもそも dec が『参照』ですよ。
 http://next1.msi.sk.shibaura-it.ac.jp/MULTIMEDIA/CPPPUBLISH/node8.html→『ポインタと参照』
 このリンクを読みましょう。
・以上。あと16進などのA~Fは大文字専用ですね。小文字だと上手く変換できませんよ。

参考URL:http://next1.msi.sk.shibaura-it.ac.jp/MULTIMEDIA/CPPPUBLISH/node8.html

★アドバイス
>for(i=0; i=digits.size()-1; i++){
 ↑
 この行がおかしいです。
 間違い⇒for(i=0; i=digits.size()-1; i++){
 正しい1⇒for(i=0; i<=digits.size()-1; i++){
 正しい2⇒for(i=0; i<digits.size(); i++){
 ※回答者 No.1 さんのアドバイス通りです。
>void関数の中、特に計算方法が間違っていると思うのですが、なにがいけないかわかりません。
 ↑
 『dec=(x*n);』ここが違う気がします。
 『dec=(dec*n+x);』とすればいいと思いますけど。
>ちなみにn進数から10進数に直す方法...続きを読む

Q10進数から8けたの2進数に変換

10進数から2進数への変換はわかるのですが
10進数から8桁の2進数への変換がわかりません。
仮に10進数の38を8桁の2進数に直す場合、どんな過程を経て、8桁の2進数になるのでしょうか。
どなたか教えていただけますと有難いです。
宜しくおねがいします。

Aベストアンサー

Windowsに付いてる電卓を、関数電卓にして
10進数から2進数への変換
8桁に統一したい場合は、
38=#100110=#00100110=%26(16進数)
これで良いと思いますよ。

PIC・AVRマイコンでは、こうやって使います。

      

Qn進数の値を10進数の値に変換するには?

こんにちは。

C言語において、n進数の値を10進数の値に変換する方法を考えています。
例えば、2進数の101を、10進数で表すと5になります。
これを関数化し、
n_to_m(int x, unsigned n); といったプロトタイプで、
渡された整数x(n進数)を、10進数での値に変換する関数を作りたいのです。
逆に、10進数の値を、n進数の値に変換する関数も一緒に作りたいと考えています。
何かいい方法を思いついた方がいらっしゃれば、是非アドバイスを頂きたいと思います。
では、よろしくお願い致します。

Aベストアンサー

>n_to_m(int x, unsigned n); といったプロトタイプで、
>渡された整数x(n進数)を、10進数での値に変換する関数を作りたいのです。

変換後の10進数を戻り値とする必要がありそうであるのと、
n_to_mという名前では何のことやらよくわからなそうなので、
こんなプロトタイプがいいのではないかと思います。

int toDecimal(int x, unsigned int n);

1)変換結果を格納する変数を0で初期化する。
2)変換元が0でない間、2-1)~2-3)を繰り返す。
2-1)変換元を10で割った剰余がn未満ならば、変換結果に加える。
2-2)変換元を10で割った剰余がn以上ならば、変換元の数値をn進数で表現できないため、
エラーとする。エラー時の戻り値をどうするかは考えてみてください。
2-3)変換元を10で割った商を、新たな変換元とする。
3)求めた変換結果を呼び出し元へ返す。

こんなところでしょうか。

Q2進数の0.101101101101・・・は10進数ではいくら?

2進数の0.101101101101・・・は10進数ではいくら?
という問題です。2進数の循環小数の10進数のなおしかたがわかりません。よろしくお願いいたします。

Aベストアンサー

変換の仕方は10進数の循環小数のときと基本的に同じで、計算を全て2進数で行い最後に分子・分母をそれぞれ10進数に直します。

x = 0.101101101...     (1)
両辺を 1000 (=2^3) 倍して、(3桁の繰り返し)
1000 * x = 101.101101...  (2)
(2)式 - (1)式で、
(1000 - 1) * x = 101    (3)
111 * x = 101
x = 101 / 111
101 / 111 は、10進数で 5 / 7。

2進数の計算といっても注意するところは、
(2)式の循環小数の繰り返し桁数に応じて右辺の小数部を相殺するために2^k倍するところと、(3)式の左辺の減算くらいです。

QC言語について質問です。 C言語のビット演算で10進数の1を左に1ビットずつずらしていって32ビット

C言語について質問です。


C言語のビット演算で10進数の1を左に1ビットずつずらしていって32ビットで表示するプログラムを書いてるんですが…最後の値が負になってしまいます。
変数の型はunsigned にしているんですが。どうしてでしょうか?

Aベストアンサー

おそらく、printf() しょ書式指定子が、 %ud ではなくて、 %d になっているためです。

ちなみに、左シフトの場合、signed でも unsigned でも、操作自体は変わりません。
(右シフトは符号の扱いがある)

それを、表示するときに、符合付きと見なすか符号無しと見なすかです。

Q10進数から2進数への変換の仕方について

10進数から2進数への変換の仕方について
以下のサイトに説明があったのですが、
http://www.pursue.ne.jp/jouhousyo/sysad/sysad010.htm

10進数の60を2進数に変換する場合、変換したい10進数を商が0になるまで2で割りつづけ商と余りを求めていますが、その時に、15/2などは7.5になり余りが、説明では商が7、余りが1になっています。
10進数から2進数へ変換する場合は、小数点以下の余りはすべて1として計算するのでしょうか?

Aベストアンサー

> 小数点以下の余りはすべて1として計算するのでしょうか?
元の10進数が整数なら、2進数で表記しても整数です。

2で割るのは2のn乗の桁について考えるからです。
順に下位の桁に移るので、小数にして考えては行き詰ります。

QC言語 10進数→2進数

キーボードで入力された1以上の正の整数n(1~15)を2進数(4bit)で出力するプログラムを作りたいんですが、
出力例に書かれている内容、

-出力例-

正の整数:12
整数 12 を2進数表記すると下位bitより 0011 となります。

----

上記の下位bit、というのはどういう意味でしょうか?

また、この下位bitというものをどうやってプログラム上で
表記すればいいのでしょうか?
教えてください。

Aベストアンサー

bitは10進数でいうところの桁のような意味で
数値が下の桁から順に書かれているということです.
下位bitより0011 = 上位ビットより1100 = 2^3 + 2^2 = 12 です.

プログラムは参考URLを見ればすぐ作成できると思います.
上位bitからの出力になっているので,そこを変更すればできます.

参考URL:http://www.geocities.jp/KY_webid/c/049ans.html


人気Q&Aランキング