ツイート
シェア
LINEで送る
B! はてぶでブックマーク
Pocketでブックマーク
RSSフィード

2進数と16進数、10進数を理解するには、小学1年生に戻ると分かりやすい。

2進数の画像
by 写真素材ダウンロードサイト【写真AC】
の画像をもとに加工しています。

ご覧のページは 4 / 7 です。先頭ページはこちら。

【16進数】2進数を人間に見やすくしたショートカット

16進数の特長はなんといっても数字じゃないものを使っているところ。位の箱に入れられる記号がひとつだけなので、10, 11, 12, 13, 14, 15 は入れられません。

(すでに2個の記号を使っている。)

そこで編み出したのがアルファベットです。

16進数の画像1

しつこいくらいに『数字で見ないで!玉の大きさで見て!』と言ってきたのはこのため。数字の呪縛に絡められてしまうと16進数は頭に入りません。

10進数 ←→ 16進数変換

16進数は直接10進数との間で変換することはあまりないんですが、同じようにやってみましょう。

まずは16進数から10進数へ変換します。10進数の "10"、2進数の "2" を "16" に変えるだけ。

入ってる数字12c
162
(256)
161
(16)
160
(1)
2563212

答えは『\(256 + 32 + 12 = 300\)』。

今度は、逆に300(10)を16進数に変換します。

\begin{align}300 \div 256 &= \textcolor{#cf2e2d}{1} 余り 44 \\ 44 \div 16 &= \textcolor{#cf2e2d}{2} 余り 12 \\ 12 \div 1 &= 12 = \textcolor{#cf2e2d}{c} \end{align}

答えは『\(12c\)』。

16進数は10進値を意識することがあまりないので()が省略されることが多い。

人間は2進数を見るとめまいがする

16進数もデジタル情報に見えますが、あくまでデジタル情報は0と1の集まりです。16進数はそれを人間が見やすくしたもの。

『それなら10進数に変換したほうがいいんじゃね?』と思いがちですが、エンジニアは10進数まで変換してしまうと、デジタルデータの解析が難しくなります。少しでも生のデータを見たい。

本当は0と1のデータを見ればいいんですが、桁が多いので読んでると疲れるしパッと見で判断できないんですね?

そこで使われるのが16進数。

データを並べてみると、プログラマーの気持ちが分かると思います。

2進数00000000 00000000 00000001 00101100
16進数012c
10進数300

2進数の桁の多さは何かと不便

2進数の0, 1の1文字が1ビット(bit)で、8bit = 1バイト(byte)です。データ解析では、1バイトごとに半角スペースで区切り、1行を4byte文字列(32桁)で表現することが多い。

例として1行しか出してませんが、それが何十行、何百行、いや何万行も出られると気を失いそうです。

この長い文字列、人間の見方では ただの "300" ですからね?

システムは解析に必要なデータをファイルに書き出します。

(ログ(記録・履歴ファイル))

2進数では書き出すデータ量が多すぎてシステムがパンクする。

そこで、生データに近く、人間が見ても解析しやすい16進数が使われます。例で言えば "012c" で済みますから。

2進数の32桁で表現する代表的なのがIPアドレス。

"192.168.88.10" とか見たことあるでしょう。2進数を1byteで区切って10進に変換した表記です。

最近はこういうのを見るようになりました。

"2001:0db8:85a3:0000:0000:8a2e:0370:7334"

従来のIPアドレス割当の枯渇に対応して桁を増やしたもの。16進で表記します。

従来をIPv4, 増やしたものをIPv6と言います。

16進数は2進数との相性がいい

16進数が2進数と10進数の間、人間が生データを見るのに使われるのは、2進数と16進数は相性がいいから。それぞれの位を見れば分かります。

2進数216
(65535)
215
(32768)
214
(16394)
213
(8192)
212
(4096)
211
(2048)
210
(1024)
29
(512)
28
(256)
27
(128)
26
(64)
25
(32)
24
(16)
23
(8)
22
(4)
21
(2)
20
(1)
16進数164
(65536)
163
(4096)
162
(256)
161
(16)
160
(1)
10進数104
(10000)
103
(1000)
102
(100)
101
(10)
1
位の比較

まず分かるのは、10進数はかぶるところがないということ。どれだけ人間とコンピュータが分かりあえないかが分かります。

プログラマーの翻訳作業の大変さも分かる。

そして、16進数の位は飛び飛びで2進数とそろう。別の言い方をすれば16進数は2進数の4桁をまとめて表現できるということ。

こうすれば一目瞭然。

2進数216
(65535)
215
(32768)
214
(16394)
213
(8192)
212
(4096)
211
(2048)
210
(1024)
29
(512)
28
(256)
27
(128)
26
(64)
25
(32)
24
(16)
23
(8)
22
(4)
21
(2)
20
(1)
16進数(24)4
(65536)
(24)3
(4096)
(24)2
(256)
(24)1
(16)
(24)0
(1)
位の比較

16進数は2進数の4桁分を一文字(1桁)で表現できるので人間にも見やすくなります。

2進数 ←→ 16進数 変換

16進数は2進数の4桁分をまとめたものなので変換もかんたん。4桁ずつ区切って変換すればそれでおしまい。

いきなり変換するのが難しければ、一旦10進数にしてからするのもありです。

16進数の画像2

この変換は自分で計算することはありません。プログラマー用の電卓があります。Windwos10の標準電卓アプリでもできる。

色(RGB)

16進表記でよく見るのは色を表現するRGBです。RGBは色の三原色の原理を利用したもので、3つの原色をそれぞれ1byte(8bit)で表現し3byte(24bit)で表現します。

RGB#は決まり
のマーク
RedGreenBlue
コード#11ffee

RGBは16,777,216通りの色が出せます。人間が目視で区別できないくらいのレベル。

Red
(赤)
256通り
Green
(緑)
256通り
Blue
(青)
256通り
256 × 256 × 25616,777,216通り
RGB 色の三原色

色にかぎらず、パソコンで書いている文字、数字、動画、音、すべての情報は2進数です。

16進数がデジタル情報じゃないのもそういうこと。a, b, c, d, e, fという文字自体、人間に見やすくしているコードで、コンピュータは理解できない。

文字は文字コードで変換して0と1で表現します。文字コードはいろんな種類がある。

(UTF-8, Shift-JIS, EUCなど。)

次は 2進数, 10進数, 16進数の呼び方
前は 【2進数】囚われの10を2に変えるだけ。
コメントを残す

*