ポインタの話をするためにはメモリ空間、メモリ空間の話をするためには2進数、16進数の話が必須になりますので、まずは具体例を挙げながら 2進数と10進数と16進数の相互変換の復習を行います。


1. 2進数 → 10 進数

ここでは例として「0b101011」を 2進数 → 10 進数変換してみましょう。
これは次の表1を作って変換できます。ここで「2^x」は「2のx乗」の意味です。

表1: 2進数 → 10 進数変換表

元の2進数 0b101011
1桁ごとに分ける 1 0 1 0 1 1
2^x 2^5 = 32 2^4 = 16 2^3 = 8 2^2 = 4 2^1 = 2 2^0 = 1
2行目 x 3 行目 32 0 8 0 2 1
変換後の10進数 32+0+8+0+2+1 = 43

慣れれば暗算で変換出来るようになりますが、初学者のうちはちゃんと表を作って勉強すると良いと思います。


2. 2進数 → 16 進数

ここでは例として「0b101011」を 2進数 → 16 進数変換してみましょう。
この変換は次の 2 進数 ←→ 10 進数 ←→ 16 進数相互変換表を使うと簡単にできます。

表2: 2 進数 ←→ 10 進数 ←→ 16 進数相互変換表

2進数 10進数 16進数
0b0000 0 0x0
0b0001 1 0x1
0b0010 2 0x2
0b0011 3 0x3
0b0100 4 0x4
0b0101 5 0x5
0b0110 6 0x6
0b0111 7 0x7
0b1000 8 0x8
0b1001 9 0x9
0b1010 10 0xA
0b1011 11 0xB
0b1100 12 0xC
0b1101 13 0xD
0b1110 14 0xE
0b1111 15 0xF

この変換表はこの業界にいる限り延々と使いますので、さっさと暗記しておいた方が良いです。

では実際に「0b101011」を 2進数 → 16 進数変換してみましょう。
そのためには、変換元の 2 進数を下の桁から 4 桁ずつ分けて、次の表3を作って変換します(桁数を合わせるため0b10に2つ0を追加して0b0010としています)。

表3: 2進数 → 16 進数変換表

元の2進数 0b101011
4桁毎に分ける 0b0010 0b1011
表2を見て16進数化 0x2 0xB
変換後の16進数 0x2B

3. 16進数 → 2 進数

次は例として「0x2B」を 16進数 → 2 進数変換してみましょう。
これも表2を使って次のようにして変換できます。

表4: 16進数 → 2 進数変換表

元の16進数 0x2B
1桁毎に分ける 0x2 0xB
表2を見て2進数化 0b0010 0b1011
変換後の2進数 0b101011

4. 16進数 → 10 進数

次は「0x2B」を 16進数 → 10 進数変換してみましょう。
これも表2を使って次のように変換できます。

表5: 16進数 → 10 進数変換表

元の16進数 0x2B
1桁ごとに分ける 0x2 0xB
表2を見て10進数化 2 11
2^x 2^4 = 16 2^0 = 1
3行目 x 4 行目 32 11
変換後の10進数 32+11 = 43

5. 10進数 → 2 進数

次は「43」を 10進数 → 2 進数変換してみましょう。
今回は次のように商が 0 になるまで割り算と余りを求める事を繰り返しながら変換表を作ります。

表6: 10進数 → 2 進数変換表

被除数 序数 余り
43(元の10進数) 2 21 1
21(前行の商) 2 10 1
10(前行の商) 2 5 0
5(前行の商) 2 2 1
2(前行の商) 2 1 0
1(前行の商) 2 0 1
変換後の2進数 (余りを下から並べる)
0b101011

6. 10進数 → 16 進数

最後に「43」を 10進数 → 16 進数変換してみましょう。
今回も次のように商が 0 になるまで割り算と余りを求める事を繰り返しながら変換表を作りますが、余りは表2を見て16進数化しておきます。

表7: 10進数 → 16 進数変換表

被除数 序数 余り(表2より16進数化)
43(元の10進数) 16 2 11 → 0xB
2(前行の商) 16 0 2 → 0x2
変換後の16進数 (余りを下から並べる)
0x2B