
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
16進をASCIIコードに変換する...
-
C#で文字列を数値に変換する方法
-
対数変換のついて
-
VB6.0の「vbFromUnicode」はVB....
-
16進コード文字列を文字列に変換
-
Visual C#のエラーについて
-
VC++ std::stringからLPCWSTRに...
-
VB.NETで1→A、2→B、26→Z、27→AA...
-
VB6 case文について
-
C++ 文字列変数と16進数の比較
-
sscanfの16進出力の逆処理
-
VBA 変数名に変数を使用したい。
-
VBAコンボボックスの内容が反映...
-
C# DataTableに最後に追加した...
-
『列名 '担当者CD' があいま...
-
EXCELのVBAでLenB関数について
-
INT64対応のprintf系関数はあり...
-
SQLを発行とは?クエリの作成と...
-
C#でbyte配列から画像を表示さ...
-
★クリスタルレポートの元になる...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB6.0の「vbFromUnicode」はVB....
-
VB.NETで1→A、2→B、26→Z、27→AA...
-
WORD型をCString型に変換する方法
-
C#で文字列を数値に変換する方法
-
C++ 文字列変数と16進数の比較
-
16進コード文字列を文字列に変換
-
vb6の桁数指定
-
16進をASCIIコードに変換する...
-
2の補数の計算について
-
VBAのstrConv関数のUNICODE変換...
-
10進数を2進数
-
【C++/CLI】int型からString型...
-
数値の値を時刻に変換する方法...
-
ASPでVBのFormat関数のような機...
-
c# 暗黙/明示的型変換の許容範囲
-
EXCEL VBA
-
Boolean型変数の値を反転する方法
-
数字→漢数字変換
-
日付を変換したい
-
対数変換のついて
おすすめ情報