10進数から2進数へ:機械の母語で数を書き直す
この変換でわかること
10進数で書かれた数を、0と1だけで書き直します。整数には2進数の表現がただ1つしかなく、どちらの向きでも情報は失われません。つまり近似ではなく、同じ数を別の表記に置き換える操作です。だからこそ桁数の多い値でも正確な答えを返せます。
余りを逆順に読む理由
2で割っていく筆算では、最初に出た余りが最下位ビットになります。そのため余りは下から上へ、最後に求めたものから順に読まなければなりません。書き出した順にそのまま並べるのが最も多いつまずきで、156は正しい10011100ではなく00111001になってしまいます。割り算の回数はそのまま結果の桁数に一致します。
10進数と2進数の対応表
プログラミングで頻繁に登場する小さな10進数と、その2進数表記です。2の累乗だけは暗記しておく価値があります。残りはそこから導けます。
| 10進数 | 2進数 |
|---|---|
| 0 | 0 |
| 1 | 1 |
| 7 | 111 |
| 8 | 1000 |
| 10 | 1010 |
| 15 | 1111 |
| 16 | 10000 |
| 31 | 11111 |
| 64 | 1000000 |
| 100 | 1100100 |
| 127 | 1111111 |
| 200 | 11001000 |
| 255 | 11111111 |
| 1000 | 1111101000 |
気づかないうちに2進数へ触れている場面
ファイルの権限、ネットワークマスク、機能フラグ、画像のチャンネルは、いずれも扱いやすい表記をまとった2進数です。156を10011100として読めると、上位ビットと中央の4ビットが立っていることが一目でわかり、状態レジスタの挙動を調べるときの疑問に直接答えてくれます。
電卓なしで桁を求める
暗算したいときは、収まる最大の2の累乗を引いて繰り返します。156 − 128 = 28、28 − 16 = 12、12 − 8 = 4、4 − 4 = 0となり、立っている重みは128、16、8、4なので10011100が得られます。
よくある質問
10進数から2進数へ手計算で変換するには?
2で割って余りを書き、商をさらに2で割る操作を商が0になるまで繰り返します。余りを最後から順に読んだものが2進数です。156なら余りは0、0、1、1、1、0、0、1となり、逆から読むと10011100になります。
2の累乗を覚えておくと何が便利ですか?
1、2、4、8、16、32、64、128、256、512、1024という並びを覚えておくと、ビット列を足し算だけで読めるようになります。8ビットの値はこの前半8個で足りるため、日常的なレジスタやフラグの確認はほとんど暗算で済みます。
電卓より大きな数でも変換できますか?
変換できます。一般的な電卓は浮動小数点に切り替わるため2の53乗あたりから丸めが始まりますが、本ツールは整数のまま計算するので、64ビットの値でも全桁が正しいまま表示されます。
小数を含む値はどうなりますか?
整数部分は正確に変換されます。小数部分は1桁ずつ展開し、余りが0になった時点で止まります。10分の1のような値は2進数では割り切れないため、結果は途中で切り捨てられ、その旨が画面に表示されます。
負の数はどう表示されますか?
2進数の桁の前にマイナス記号を付けます。これは符号と絶対値による表記で、2の補数ではありません。2の補数はビット幅を決めて初めて意味を持つ表現なので、幅を前提にしない本ツールでは採用していません。