ポインタの話をするためにはメモリ空間、メモリ空間の話をするためには2進数、16進数の話が必須になりますので、まずは具体例を挙げながら 2進数と10進数と16進数の相互変換の復習を行います。
ここでは例として「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 |
慣れれば暗算で変換出来るようになりますが、初学者のうちはちゃんと表を作って勉強すると良いと思います。
ここでは例として「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 |
次は例として「0x2B」を 16進数 → 2 進数変換してみましょう。
これも表2を使って次のようにして変換できます。
表4: 16進数 → 2 進数変換表
元の16進数 | 0x2B | |
1桁毎に分ける | 0x2 | 0xB |
表2を見て2進数化 | 0b0010 | 0b1011 |
変換後の2進数 | 0b101011 |
次は「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 |
次は「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 |
最後に「43」を 10進数 → 16 進数変換してみましょう。
今回も次のように商が 0 になるまで割り算と余りを求める事を繰り返しながら変換表を作りますが、余りは表2を見て16進数化しておきます。
表7: 10進数 → 16 進数変換表
被除数 | 序数 | 商 | 余り(表2より16進数化) |
43(元の10進数) | 16 | 2 | 11 → 0xB |
2(前行の商) | 16 | 0 | 2 → 0x2 |
変換後の16進数 | (余りを下から並べる) 0x2B |