メインコンテンツへスキップ
CalcMax

2進数→10進数変換

計算結果

11

10進数

各位の値
8 + 2 + 1

2進数から10進数への変換ツールは、2を基数として書かれた数を、10を基数として書いた同じ数に変えます。値は変わらず、変わるのは表記だけです。位取り記法がその全部です。桁は、その数字そのものの値に基数の累乗を掛けた値を持ち、2進数はその基数を2にしただけです。規則は10進数ですでに知っています。352が3つの100と5つの10と2つの1なのは、それぞれの位が右隣の10倍の値を持つからです。2進数ではそれぞれの位が右隣の2倍の値を持つので、位は1、2、4、8、16、32…と続き、桁は0か1しかありません。変換は、1が立っている位を足し上げ、0が立っている位を無視するだけです。「1011」は8と2と1で、11です。このページが答えの下に印字するのがその和で、立っているビットごとに1項ずつ並びます。頭の中でやると人が間違えるのがまさにこの段で、位を1つ飛ばしたり、数え始めを逆の端から始めたりします。桁は左からではなく右から読みます。いちばん右のビットは、数の長さがいくつであっても常に1の位です。

1バイトの各ビットの位の値。左端から右端まで

ビット2の累乗値
72⁷128
62⁶64
52⁵32
42⁴16
32³8
22²4
12¹2
02⁰1

これが変換を実行するときに使う物差しで、固定です。上の入力が変わっても変わらないので、両者が食い違って見えても矛盾ではありません。パネルは打ち込まれた数に答え、表は1バイトの各位置がいくらの値かというもっと一般的な問いに答えます。まだ手に数がないときはこちらが先に来る問いです。行を下へ読めば毎回半分、上へ読めば毎回2倍で、模様が自分自身を説明します。いちばん右のビットが1なのはそこが一の位だからで、その隣が2なのは基数が2だからで、左へ1つ動くごとに倍になります。8行で止まるのは、人が実際に変換する値がバイトの幅に住んでいるからです。ステータスフラグ、色のチャンネル、パーミッションマスク。53ビット目まで続く表は、誰も読まない数の壁になるだけです。ある数の立っているビットはこの表から読み取って足し合わせるので、表とその上に印字される和は、同じ8つの位置を2通りの仕方で述べていることになります。向きについて注意が1つあります。ここでのビット番号は右から数えるので、ビット0は最後の桁です。ビットを左から数える資料は、同じことを意味していながら、この表とどの行でも食い違います。

公式

「1011」 = 1×2³ + 0×2² + 1×2¹ + 1×2⁰ = 8 + 2 + 1 = 11

binary
読む対象の数で、2を基数として書かれています。桁は0と1だけでそれ以外はなく、数の値はそれぞれの桁がどこに座っているかで決まり、桁数では決まりません
2ⁿ
ある位の値です。右端から何番目かという数をnとして、2の累乗になります。右端を0番目と数えます。並びは1、2、4、8、16、32、64、128で、各段は前の段の2倍です
digit × 2ⁿ
和の1つの項です。桁は0か1なので、この掛け算が何かを変えることはありません。1はその位の値をまるごと寄与し、0は何も寄与しません。変換が「1が立っている位を拾い出す」ことに還元されるのはそのためです
Σ
すべての項を足し合わせることです。それで変換の全体になります。立っているビットの位の値を足せば、その合計が10進数でのその数です
8 + 2 + 1
0の項を落として書いた和で、手で書くときの形です。「1011」は8と2と1の位に1が立ち、4の位に0が立っているので、4は決して現れません。それが欠けているのが見えることが要点で、人が見失うのはそこだからです
53ビット
入力できる長さです。2進数で53桁、10進数で9007199254740991にあたります。機械が隣り合う整数を見分けられなくなる幅なので、それより長い入力は正確に読めず、推測するのではなく拒否します

これは、読む向きが両方ある変換です。順方向は、2進数で届いた値を理解しなければならない場合です。デバッガが印字したステータスバイト、ハードウェアレジスタのフラグ列、設定ファイルの中のビットマスク、ネットワークツールの出力、あるいは答えを10を基数として書く宿題。逆方向は、ふつうの数の裏に隠れている2の累乗の推論です。その数が2の累乗かどうか、ある値より上で次に大きい2の累乗は何か、ある値を保存するのに何ビット要るか、ある幅のバスがどれだけの範囲を指せるか。これらの問いはすべて、どの位が立っているかを見ることで答えが出ます。プログラマは、サブネットマスクを求めるとき、いくつかの小さな値を1つの整数に詰めるとき、保存された数がどの選択肢を有効にしているか確かめるときにも、同じ和に出会います。位の値を出すことが、このページを教材としても役立つものにしています。繰り上がりの規則と位の重みは、和を書き出してみるまで恣意的に見える2つのもので、打ち込まれたものに対してその和をページが書いてくれることで、本の計算例が自分の答案の点検になります。2進数を手で読む人も、答えが何かだけでなくなぜそうなるのかを知りたい人も、ここから同じものを得られます。

計算例

  1. 「1011」を読む

    1. 4つの桁の下に、右から順に位の値を書く:1、2、4、8
    2. 1である桁を残し、0である桁を落とす。残るのは8、2、1である
    3. 4の位は0なので何も寄与せず、和に現れない
    4. 足す:8 + 2 + 1 = 11

    既定値で、欠けている項を示す例です。「1011」は4の位に0があるので、和は8 + 4 + 2 + 1ではなく8 + 2 + 1と読みます。桁を10進数の数字として読んでしまうと「1011」という別の数になり、この変換が間違ういちばんよくある形がそれです。

  2. 1バイト全体を読む:「10110010」

    1. 桁が8つなので、位の値は128から1まで並ぶ
    2. 1が立っている位は128、32、16、2である
    3. 足す:128 + 32 = 160、それに16で176、それに2で178
    4. 1バイトが持てる最大の値は「11111111」で、255である

    1バイトは実際の2進数のほとんどがそうである幅なので、一度は通して解く価値があります。いちばん左のビットが128で、いちばん右が1だと分かっていれば、バイトは一目で読めます。同じ8桁でも反対の端から読めばまったく違う値になるので、向きは細部ではありません。

  3. 先頭の0は値を変えない

    1. 先頭の4つの0は128、64、32、16の位に座っている
    2. 0はどこに座っていても何も寄与しないので、それらの位は和から外れる
    3. 残るのは前と同じ8 + 2 + 1で、11になる

    値を固定幅に埋めるのはふつうのことです。幅が意味を持つときは「1011」ではなく「00001011」と書きます。だから変換ツールはどちらの形も受け付け、同じ答えを返さなければなりません。実際そうなっていて、先頭の0は和に入らないので、印字される和は両者で同一です。

  4. 負の値「-1011」を読む

    1. マイナス記号は2進数の一部ではなく、その前についた符号である
    2. 桁はこれまでどおり読む:「1011」は8 + 2 + 1 = 11である
    3. 符号を戻す:値は-11である

    ここには符号を畳み込む固定幅がないので、符号は桁の外側に置いたままにします。プロセッサが-11を8ビットに保存するなら「11110101」と書き、それはまったく別の桁の並びで、幅が8だと知っていることが前提になります。このページに幅はないので、符号は符号のままです。

適用限界

このページは整数の2進数だけを読みます。2進小数点がないので、1.01は受け付けず変換もできません。小数を読むには小数点がどこに座るかという2つ目の規則が要り、その規則は前提にするのではなく入力ごとに述べなければならなくなります。入力は最長53桁で、10進数では9007199254740991にあたります。それより長い値は機械が正確に保持できず、丸めるのではなく拒否します。先頭の0は受け付けて無視するので、「00001011」と「1011」は同じ数で、印字される和も同一です。前についたマイナス記号は受け付け、両方の出力に引き継ぎます。このページは2進数から10進数へ変換します。逆の向きは下にリンクした別のページで、16進数の読みはまた別のページです。計算はせず、ビット演算もしません。ANDもORもXORもシフトもここにはありません。

よくある質問

2進数から10進数へ手で変換するにはどうするのか
桁の下に位の値を書きます。右端を1として、左へ動くごとに倍にしていきます。1、2、4、8、16…と続きます。次に1の下にある値を残し、0の下にある値を捨てて、残ったものを足します。「1011」なら8、2、1が残り、11になります。間違える形は2つあり、桁を右からではなく左から読むことと、0が立っている位の値を足してしまうことです。どちらもこのページが印字する和に出ます。数に入る項だけが並ぶからです。
答えに、下が0の位の値が入らないのはなぜか
何も寄与しないからで、書き出せば肝心の部分が埋もれてしまいます。0にどんな位の値を掛けても0なので、0×4のような項は合計を変えずに落とせます。和を8 + 0 + 2 + 1ではなく8 + 2 + 1と示すのは、欠けている4が見えるようにするためです。どの位が欠けているかが見えることが、桁をそもそも正しくそろえられたかの点検になります。
先頭の0は数を変えるのか
変えません。先頭の0は何も寄与しない位に座っていて、10進数で007が7のままなのとまったく同じです。「00001011」と「1011」は同じ数で、このページはどちらにも同じ2つの出力を返します。幅が意味を持つときは固定幅に埋めるのがふつうで、1バイトは通常8桁すべてを書きます。だから埋めた形を受け付けるのは便宜ではなく必要です。
ここで変換できるいちばん大きな2進数は何か
53桁で、10進数では9007199254740991にあたります。この上限はこのページが決めたものではありません。機械の数が隣り合う整数を見分けられなくなる幅なので、それより長い入力は正確に読めず、答えに見えて答えでないものを印字することになってしまいます。長すぎる入力はメッセージを付けて拒否します。変換は読むことに、読むことは無制限に聞こえるので、このことは計算のページよりここで重くのしかかります。
2で割り続けるのと同じことか
別の道筋で同じ答えになります。2で割り続けると桁が右から出てきますが、それは逆の向き、つまり10進数から2進数へ行くときに使う方法です。2進数から10進数へ行くなら、桁はすでに分かっていて重みを足すだけなので、位の値の和のほうが短く済みます。どちらも正しいのですが、このページが印字するのは和のほうです。一目で点検できるのがそちらだからです。
小数部分のある2進数も変換できるのか
ここではできません。このページは整数を読むので、2進小数点は推測せず拒否します。2進数の小数はきちんと定義でき、小数点より右の位は2分の1、4分の1、8分の1…という値になります。しかしそれを受け付けるページは、何桁まで見せるか、最後の1桁をどう丸めるかを決めなければならず、この一群のページは全体を通して整数で動いています。境界を群のどのページでも同じ場所に置いておけば、同じ入力が片方のページで受け付けられ、もう片方で拒否されることがありません。

参考文献

関連する計算ツール