• ベストアンサー

2進数から10進数変換

int henkan(char [ ]) という関数に、”10111”と 2進数で表記されている文字列を数値に変換したいんですが、 どうやったらよいのか教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

>なぜ、2倍してビットを足すんですか? #4様が既に書いておられますが、補足的に 10111は、 1*2^4+0*2^3+1*2^2+1*2^1+1*2^0 の意味(2進数だから)です。 0から始めて2倍して(先頭の)ビットから足すと ((((0*2+1)*2+0)*2+1)*2+1)*2+1 になります。 これは、 1*2^4+0*2^3+1*2^2+1*2^1+1*2^0 と同じです。

その他の回答 (4)

回答No.4

> なぜ、2倍してビットを足すんですか? X = 0 から始めて: "10111"を変換すると: X = X*2 + 1 … 1 X = X*2 + 0 … 2 X = X*2 + 1 … 5 X = X*2 + 1 … 11 X = X*2 + 1 … 23 で、答は 23 です。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#include <stdlib.h>の strtol か strtoul を使うのが簡単 自前でやるなら、 2倍してビット(1か0)を足すのを繰り返す

W07A09
質問者

お礼

ありがとうございます。 >2倍してビット(1か0)を足すのを繰り返す なぜ、2倍してビットを足すんですか?

回答No.2

strtol関数で一発で変換できます。 例) #include <stdlib.h> (省略) int value; value=strtol("10111",NULL,2); http://www.linux.or.jp/JM/html/LDP_man-pages/man3/strtol.3.html

回答No.1

紙とエンピツで計算してみましょう。 それと同じことをやらせればいい。

関連するQ&A