[techaday:0006] 2進数は下から3桁ずつ読もう

[techaday:0006] 2進数は下から3桁ずつ読もう

何か綺麗ですね

はじめに

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” とかでやると一発で出てくるんですけどね.ハハハ