2進法と16進法

Cの絵本

もう10回ぐらいプログラミングには挫折してるけど、11回目ぐらいの再挑戦をしてみてる昨今。

そんなゆるふわ脳な私なんやけど、id:Trapezoid がオススメしてくれた「Cの絵本」って本があまりにも名著!これならイケるかも!そんな気がしています。

Cの絵本―C言語が好きになる9つの扉

Cの絵本―C言語が好きになる9つの扉

で、どうやら2進法と16進法をこの本でカバーしてる以上に理解しないと次に進めないようなかんじなので、ちょっとおべんきょしてみた。

2進数

えと、コンピュータは電化製品(?)なので、オンとオフでものを考えます。それを0と1として、二進数をつかうのです。私が調子悪いときにうっかり陥っちゃう「ゼロヒャクな考え方」みたい。

・・・だけど一応人間なので、日頃は10進法でモノを考えます。「人間が10進法でモノを考えるのは、人間の指が10本だから」ってトリビアに地味にびっくり。
というわけで、2進数で数を数えた場合の10進法との対応表はこちら。

10進法 2進法
0 0
1 1
2 10
3 11
4 100
5 101
6 110
7 111
8 1000
9 1001
10 1010
11 1011
12 1100
13 1101
14 1110
15 1111
16 10000

ここらへんで、ちょっと無理に気付いてみると。ケタ数があがってるのって、2と4と8と16と・・・っていう2の累乗やねんな。これぞ2進数!
つまり、例えば2進数の「10101010」という数は


10101010(2進法)= (2**7)*1 + (2**6)*0 + (2**5)*1 + (2**4)*0 + (2**3)*1 + (2**2)*0 + (2**1)*1 + 2**0*0
         = 128 + 32 + 8 + 2
= 170(10進数)   なのデス!

10進数を2進法に変換するライフハック(笑)

今度は逆に、2で割っていき、余りを求め、余りを下から上へ並べたらいいそうデス。


16進数

2進数だと冗長になるので、16進数を使うのが一般的であるらしい。

16進数で使うのは、「0 1 2 3 4 5 6 7 8 9 A B C D E F 」の16コ。

2進数を4ケタずつ区切り、この2進数の4ケタで表せていた2**4 =16コの数を置き換えて表現するねんて。

つまり、下のようになります。

10進法 2進法 16進法
0 0 0
1 1 1
2 10 2
3 11 3
4 100 4
5 101 5
6 110 6
7 111 7
8 1000 8
9 1001 9
10 1010 A
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 1111 F
16 10000 10

170(10進数)= 10101010(2進数)=AA(16進数)
というわけなのですっ。

身近な16進数表記

日々 photoshop elements で色を変えるときとかに、黒と白の 000000 と ffffff はもう覚えちゃってたけど、これは 24bitカラー(=16777216色)の16進数表記だね実は。

某求人の「0x22歳まで」っていうのは、16進数の「2」は2進数で「10」だから、22(16進法)=「0010 0010」(2進法)=34(10進法) ということだったのです。
34才まで平気とは、けっこう親切なかんじですね( ´∀`)!