
C言語で、2進数から10進数に変換するプログラムを作ろうと思っています。
手計算で行う場合は2進数の
下1桁目×1
下2桁目×2
下3桁目×4。。。と計算しています。
下○桁目を取り出す方法を考えているのですが、思いつきません。
3桁の2進数を変換するプログラム(とりあえず101を変換することを考えて・・・)を書いてみたのですが、101を考えすぎたためか上手くいきませんでした。
最終的には10進数でintの範囲内程度の2進数の変換ができるプログラムを書きたいと思っています。
アドバイスをお願いします。
ちなみに、考えてみたプログラムは以下の通りです。
101以外で上手く変換できませんね・・・ ここに貼り付けるのが恥ずかしいです。
#include <stdio.h>
main()
{
int x ,i ,z[3];
scanf("%d",&x);
z[0]=x/100*4;
z[1]=(x/10-10)*2;
z[2]=(x-110)*1;
printf("%d",z[0]+z[1]+z[2]);
return 0;
}
A 回答 (7件)
- 最新から表示
- 回答順に表示
No.7
- 回答日時:
no3殿のご回答が、個人的には、シンプルで賛同します。
以下参考です。
strtolやatoi以外で実現するとして、3桁が固定であれば、
手順0, fgets()などで文字を1バイトずつ取得
手順1, 1回目の値は、0x30を引いて1であれば2の2乗を加算
手順2, 2回目の値は、0x30を引いて1であれば2の1乗を加算
手順3, 最後の値は、0x30を引いて1であれば2の0乗(1)を加算
備考:変数の確保やループ処理は適宜行って下さい。
fgets()ですと1回ずつenterが必要です。ttyを設定すれば
enterなしで、入力は可ですが話が発散するので割愛します。

No.6
- 回答日時:
こんにちは。
入力されるのはあくまで数字の文字列と考えてはどうでしょうか?
シフトとか難しいものを使わない方法として以下のような方法があります。
1.入力されるものを数字の文字列として取得する
2.取得した数字文字列を2進の整数と考え、整数値を作成する
(1文字は各桁で文字列数は桁数に相当する)
3.作成した整数値を10進の文字列として出力する
解っていると思いますが、ヒントとして
・2進数は1桁上がると×2する
・10進数は1桁上がると×10する
正の整数に限定するとそれほど難しくは無いはずです。
負の値や実数も視野に入れるとかなり難しくなります。
2.と3.の部分に汎用性を持たせると 2進→16進、10進→8進
のような変換もできます。
ご参考までに。
No.5
- 回答日時:
>手計算で行う場合は2進数の
>下1桁目×1
>下2桁目×2
>下3桁目×4。。。と計算しています。
この考え方は合ってます。
>z[0]=x/100*4;
>z[1]=(x/10-10)*2;
>z[2]=(x-110)*1;
取出し方が間違ってます。
1桁目 10で割った余り
C/C++では余りを求めるのに % と言う便利な演算子があります。
2桁目以降は桁下げを行って1桁目と同じ方法で求めると簡単です。
((x/ 10) % 10) * 2
3桁目,4桁目も同じように
((x/100) % 10) * 4
((x/1000) % 10) * 8
で求める事が出来ます。
もっとスマートな方法もありますが、それはご自分で工夫してください。
No.2
- 回答日時:
#include <stdio.h>
void main(void)
{
int d,b,a;
scanf("%d",&b);
d=0;
a=1;
for(;b!=0;) {
d += b % 10 == 0 ? 0 : a;
a <<= 1;
b /= 10;
}
printf("%d",d);
}
10ビットまでです。11桁入れると誤動作します。
(11桁だとscanfでbがオーバーフローする)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# 3×3のラテン方陣をつくるプログラムを作成したのですが、(↓) #include <stdio.h> 5 2023/07/10 01:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB6.0の「vbFromUnicode」はVB....
-
C++/CLI System::String::Fotma...
-
16進をASCIIコードに変換する...
-
2進数から10進数へ変換
-
【C++/CLI】int型からString型...
-
WORD型をCString型に変換する方法
-
バイナリデータの文字列変換(5...
-
textbox.textやlabel.captionの...
-
C#のeuc-jp変換について
-
C#でテキストボックスに入力し...
-
Pythonの指数表記について
-
VB.NET ゼロ埋め
-
2の補数の計算について
-
C#で文字列を数値に変換する方法
-
計算方法
-
バイト型のデータをLong型に変換
-
VBA 変数名に変数を使用したい。
-
INT64対応のprintf系関数はあり...
-
vba フィルター 複数条件 3つ以...
-
EXCELのVBAでLenB関数について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB6.0の「vbFromUnicode」はVB....
-
VB.NETで1→A、2→B、26→Z、27→AA...
-
WORD型をCString型に変換する方法
-
16進をASCIIコードに変換する...
-
バイト型のデータをLong型に変換
-
16進コード文字列を文字列に変換
-
VB6.0 String型→Long型変換方法...
-
C#で文字列を数値に変換する方法
-
【C++/CLI】int型からString型...
-
2の補数の計算について
-
VC++ std::stringからLPCWSTRに...
-
vb6の桁数指定
-
C#でListとDictionaryの判別方法
-
VBAのstrConv関数のUNICODE変換...
-
対数変換のついて
-
文字型を日付/時刻型に変換する...
-
C++ 文字列変数と16進数の比較
-
RGBとHSLを相互変換する際の端...
-
Excelの数字(文字列)合計につい...
-
Boolean型変数の値を反転する方法
おすすめ情報