はじめに
16進数や2進数がスラスラ読み書きできるようになりたいと思いませんか?普段バイナリをいじらない人でも,宴会芸として使えるかも? ということで,今回は \(\{16進数, 2進数\} \times \{読み, 書き\} \) の元として,2進数の読み方のコツについて書いていきます.
前提知識
- 3桁の2進数が読める(0〜7までの8通りなので覚えるか計算するかしてください…)
- 九九と2桁の足し算が暗算できる
効能
- スラスラとまではいかないものの,めちゃくちゃ迷うことはなくなる
2進数を読む
まずは基本の2進数からです.16ビットは意外と数が大きくなって難しいので8ビットを対象にします.
0〜7の10進数は,2進数では3桁でおさまるので,これはまず覚えてしまいましょう. 慣れないうちはその都度足し算しましょう.そのうち覚えると思います.
さて,ここまでくれば簡単です.あとは下から3桁ずつ読んでいきます. 下位の3桁は読んだそのままの値(0〜7),つぎの3桁は読んだ値に8をかけたものになります. 余った上位の2ビットですが,高々4通りなので覚えられる気がします.
上位2ビット | 10進 |
---|---|
00 | 0 |
01 | 64 |
10 | 128 |
11 | 192 |
こいつらはよく見る数字だと思うのでいけます,きっと.いけない場合は64で掛け算しましょう.
ポイント : 下から3桁ずつ読み,上位2ビットの値と足す
3桁ずつがポイントです.これによって,4ビットずつで読む場合に比べて計算が少し楽になります. 4ビットずつで読むと \(16 \times 15,14,13,12\ldots\) を瞬時に言える必要があり,ハードルがちょっと高いです.
実際にやってみましょう.例えば $$ (01001011)_2 $$ を下から3桁づつで区切ると, $$ 01|001|011 $$ となり,1*8+3で11,上位2ビットは64なので,75と読めます.思ったより瞬殺ですね(書きながら).
$$ 11|011|011 $$ なら,192+24+3で,219です.これならなんとか暗算で読めそうですね.
じゃあこれはどうでしょうか $$ 11|111|011 $$ 192+56+3ですね.私は数値の計算が苦手なので,この辺から暗算では少し時間がかかります. でも考えてみてください.これは \((11111111)_2\) から \((100)_2\) だけ引いたものです. つまり255-4で251になります.このように簡単にできる例もありますが,0のビットが2つより多い場合に使うと余計にややこしくなります.
このように,3ビットずつ読むことで多少楽に読めるようになります.
まとめ
- 下位から3ビットずつ読むことで暗算がちょっと楽になる
- すらすらとは言わないけれども,1ビットずつや4ビットずつで読むときに比べて格段に読みやすくなる(当社比)
補足
- まあGoogleで “0b11111011111 in decimal” とかでやると一発で出てくるんですけどね.ハハハ