• 締切済み

2進数から10進数へ変換プログラム

皆さんこんにちは (・。・) 2進数から10進数へ変換プログラムを作りたいのですが、分かりません 自分の電卓機で計算すると  1011=11 1010=10 101010=42 現在 O'rielly の本をよんでいますが、書いたこともちょっと分かりづらいので、お願いします。 有難うございます

みんなの回答

noname#226737
noname#226737
回答No.5

まず2進数が10進数・16進数では4bitで処理する為4で割り切れる前処理が必要です。 長さが4で割り切れない時は0で補完します。 11→0011 の様な形です。 これを一致させて0~Fに分岐一致させます。 スイッチ文またはif文にて、 サブルーチン if(motome eq "0000"){kotae = "0";return(kotae)} else if(motome eq "0001"){kotae = "1";return(kotae)} .... else if(motome eq "1111"){kotae = "F";return(kotae)} else{err("エラー間違いです0")} return; これをやると16進文字が出来上がります。 説明が長くなるの殆んど省きましたがサーバーで動かすPerl/CGIでしたらホームページ 「たっちゃんのHP」の大きな数値の計算機に入っています。 書式が違うので分かりにくいかもしれませんが、zipで見てください。

参考URL:
http://www2s.biglobe.ne.jp/~tatsuji/
全文を見る
すると、全ての回答が全文表示されます。
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.4

★このカテゴリで『2進数』キーワードで検索するとたくさん出てきますよ。 ・最初に『2進数』とは? ・たとえば、2 進数の『1011』はなぜ 10 進数にすると『11』になるのかを考えます。  すると『1011』が次のように  =『1×(2^3)』+『0×(2^2)』+『1×(2^1)』+『1×(2^0)』  =『1×8』+『0×4』+『1×2』+『1×1』  =『8』+『0』+『2』+『1』  =『11』←10進数です。  となっているからです。分かりますか? ・もうちょっと分かりやすく書き換えると  『1×(2^3)』+  『0×(2^2)』+  『1×(2^1)』+  『1×(2^0)』=『1011』となります。  つまり、下位ビットから順に 2 の 0乗、1乗、2乗、3乗…となります。  これをプログラムに変換するには下位ビットから順に 2 の n乗をビット単位で掛けていきます。  そして、そのかけた数をどんどん加算していきます。すると 10 進数の値が得られます。 ・今回は 2 進文字列を 10 進整数に変換する方法と思いますので、左から文字列を解読して  1ビット左シフトします。その後に、0 か 1 をビット OR していけば良いでしょう。  下にそのサンプルを載せます。 サンプル: char *string = "1011"; ←これが2進文字列 char *p; ←文字列のポインタ int ans; ←10進整数の変数 ans = 0; ←初期化(for文の式1に記述しても良い) for ( p = string ; *p != '\0' ; p++ ){  if ( *p == '0' ){   ans <<= 1; ←2進数なので1ビットシフト(8進数ならば3ビットシフト)   ans |= 0; ←*p が'0'だから0(特に必要ありませんが対応を取るために記述)  }  else if ( *p == '1' ){   ans <<= 1;   ans |= 1; ←*p が'1'だから1  }  else break; ←0 or 1 以外の文字(変換終了) } printf( "ans = %d\n", ans ); ←変換結果を表示 最後に: ・上記のサンプルは 2 進文字列を 10 進整数に変換しますが、4進、8進文字列の場合は、  シフトするビット数を 2、3ビットにします。あと 4進は'0'~'3'まで、8進では'0'~'7'の  文字の部分を増やします。 ・上記は『ans <<= 1;』と『ans |= 1;』の2行に分け if-else を使っていますが、  for 文中を『ans = ((ans << 1) | (*p - '0'));』という1行でも記述できます。 ・以上。おわり。→下の『参考URL』もどうぞ。

参考URL:
http://oshiete.goo.ne.jp/search/search.php?status=select&MT=2%BF%CA%BF%F4&ct_select=1&ct0=205&ct1=221&ct2=250
全文を見る
すると、全ての回答が全文表示されます。
回答No.3

  #include <stdio.h> int main(void) { int num, ch; for(num = 0; (ch = getchar()) != '\n'; ) num = num * 2 + (ch == '1'); printf("%d", num); return 0; }  

全文を見る
すると、全ての回答が全文表示されます。
  • yaa6
  • ベストアンサー率22% (2/9)
回答No.2

2進数をあらわす文字列(0,1の列)をStrBとします。 答えとなる10進数をintDとし、0で初期化します。 StrBの長さを測り、lbとします。 文字列を左から(たいていのプログラミング言語は処理が右からなので)一文字ずつ調べ、n番目(n = 1,2,3…)の文字のとき その文字が1なら intD = intD + 2の(lb - n)乗 (何乗という計算のない言語ならループを回して2を(lb - n)回掛けます) その文字が0なら、何もしない すべての文字について処理をした後のintDが答えの10進数です。

全文を見る
すると、全ての回答が全文表示されます。
  • debukuro
  • ベストアンサー率19% (3635/18948)
回答No.1

右端を第0ビットとし左に向かってビット番号をつけます ビット番号をnとし、ビットが立っているときそのビットの十進数は 2のn乗となります たとえば 第一ビットと第三ビットが立っていれば 第一ビットは2の1乗=2 第三ビットは2の三乗=8 したがって 1010=2+8=10 となります 第0ビットが立っていれば 2の0乗=1 です

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 10進数を12進数に変換する方法

    10進数を12進数に変換する方法を教えてください。 計算機などは使わず手計算で変換する方法です。

  • 2進数から10進数へ変換

    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; }

  • 2進数から16進数の計算を電卓で行うには?

    2進数から16進数へ変換する際の質問です。 2進数から16進数の計算を、WinXPの電卓(アクセサリ)で行うにはどうしたらいいのでしょうか?できるんでしょうか? また2進数『00030101』のような数値を16進に買えることは、winの電卓でできるのでしょうか? ありえない数値なんでしょうか?イマイチ解からないんですが・・・。 よろしかったら教えてくださいー。

  • 10進の自然数を2進数に変換するプログラム

    10進の自然数を2進数に変換するプログラム(java)を教えてください 整数型の変数aから第bビット目(最初を下位ビットとして第0ビットとする)を取り出すメソッドを作成して、プログラムを組みたいのですが、やり方がいまいちわかりません。 どなたかわかる方よろしくお願いします!

  • 8進数から16進数への変換

    8進数から16進数、また、16進数から8進数に 計算過程でほかの進数に変換することなく直接変換できますか?

  • 基数変換(?)の出来る電卓

    基数変換(?)というか、10進数から2進数や16進数や8進数への変換、またはその逆の計算(変換)ができる電卓ありましたら教えてください。なるべく安いほうがいいです。(中古も可)

  • 2進数を10進数にするプログラム作成について

    10進数から2進数に変換するプログラムはできたのですが2進数から10進数に変換するプログラムが作れません。。 値を入力してください:1111←と入力(例) 10進数では15です。 もう一度実行しますか?(1…yes/2…no) というプログラムを作ろう思っています。 うまく作れずエラーばかり起きてしまいます。 どうか教えて下さい。お願いします。

  • 『2進数→16進数の変換』などの総称は?

    プログラム作成の練習として、  2進数を16進数に変換  16進数を2進数に変換 などができる簡単なプログラムを作成しました。 これらのプログラムを全てまとめて何か日本語の名前をつけたいのですが、何とつけるのが適してるのでしょうか? 今は『進数変換』や『記数法変換』という名前を考えています。 数学に詳しい方や、数学が好きな方、アドバイスをお願いします。

  • Delphi 6 で 2進数→10進数変換

    いつも質問ばかりですみません。現在 Delphi Ver 6.0 Personal 版で プログラムの勉強を始めたのですが 2進数を10進数に変換するために intPower などを用いてプログラムを考えて見ましたが上手く行きませんでした。どねたか[HELP]をお願いします。

  • 10進数を2進数に変換するプログラム

    このアセンブラのプログラムはIN命令によって3桁のレコードに入力された10進数の値を2進数に変換するプログラムです。 INPUT START                      (1) RPUSH                      (2) IN IBUF,ILEN ;レコードを入力       (3)     LD GR0,ILEN                (4) JMI FIN2 ;ファイルの終わり      (5) LD GR1,=0   ;けた数のカウンタ      (6) LD GR4,=0   ;数値の初期化        (7) LOOP2 LD GR3,IBUF,GR1               (8) AND GR3,=#000F ;数字を数値に変換      (9) LD GR5,GR4;ここから↓4つの命令はGR4を10倍する (10) SLL GR5,3;                   (11) SLL GR4,1;                   (12) ADDA GR4,GR5;                  (13) ADDA GR4,GR3                   (14) ADDA GR1,=1                   (15) CPA GR1,GR0                   (16) JMI LOOP2                    (17) LD GR0,GR4                   (18) FIN2 RPOP                         (19) RET ILEN DS 1 IBUF DS 256 END (8)のLOOP2 LD GR3,IBUF,GR1の命令なのですが、「これはIBUFとGR1のアドレスをたしてGR3にその内容を格納する。」という意味であり、その後(14)で10倍されたGR4にたしています。 質問としては、この2進数に変換するプログラムでGR3とGR4の役割を教えていただきたいです。 GR1はレコードの桁数に使われている領域だとわかります。 個人的な解釈としては、GR4はレコードに入力する10進数の数値なのですが、GR4をなぜ10倍すると2進数に変換されるのかなどやGR3の意味がわからないために全く理解できません。 よろしくお願いします。

TS3300のWi-Fi通信設定ができない
このQ&Aのポイント
  • iPhoneでTS3300のWi-Fi通信設定ができない場合の対処方法を教えてください
  • TS3300のプリンター側のWi-Fiが一覧に表示されず、設定ができません。どうすればいいですか?
  • TS3300のWi-Fi通信設定がパソコンでできず、困っています。解決策を教えてください。
回答を見る