2 進数 と 10 進数間の相互変換 ( Binary <-> Decimal )
2 進数 から 10 進数 への変換
2 ^ (桁数 -1) を桁分繰り返して足す。
1001 の場合
- 2^3 * 1 -> 8 * 1 -> 8
- 2^2 * 0 -> 4 * 0 -> 0
- 2^1 * 0 -> 2 * 0 -> 0
- 2^0 * 1 -> 1 * 1 -> 1
これで合計 9
10 進数 から 2 進数 への変換
2 で割って商と余りを出す。
余りをその桁の bit として、商を再度割り続ける
9 の場合
- 9/2 -> 4 + 1
- 4/2 -> 2 + 0
- 2/2 -> 1 + 0
- 1/2 -> 0 + 1
逆から並べて 1001
252 の場合(紙を使う場合)
別解1
9 -> 8 + 1 -> 2^3 + 2^2*0 + 2^1*0 + 2^0
-> 1001
- 160
- 128 + 32
- 2^7 + 2^6*0 + 2^5 + 2^4*0 + ...
- 1010,0000
というように、2 の累乗の数の足し算に分解する。
2^n 乗で割やすい数だと、このやり方の方が速い。
別解2 ( 4, 8, 16, 128, 256 ) などの場合
10 進数と 2 進数で桁が上がるところを覚える
キリがいい数なら、一撃で出せる
- 2: 10
- 4: 100
- 8: 1,000
- 16: 10,000
- 128: 1000_0000 (2^7, 8bit)
- 256: 1_0000_0000 (2^8, 9bit)
- 1024: 2^10
※ 255: 1111_1111 (2^8 - 2^0, 8bit)
(計算には 8 ビットが良くつかわれる
2 進数 <-> 16 進数 ( Binary <-> Hexdecimal )
2 進数 -> 16 進数
4 桁ずつに分割して、各自 10 進数に変換する。
その後、16 進数に変換する。
1011,0110 の場合
- 1011 を 10 進数に変換する。
- 2^3 + 2^2*0 + 2^1 + 2^1
- 8 + 0 + 2 + 1 -> 11
- 11 を 16 進数に変換する。
- 16 進数では 16 まで 0 ~ F の一桁で表現する
- だから 9 -> A -> B になる。
- よって 11 は B
- 0110 を 10 進数に変換する。
- 8*0 + 4 + 2 + 0 -> 6
- 6 を 16 進数に変換する
- 9 未満なのでそのまま 6
- 2 と 4 をくっつける
- B6
16 進数 -> 2 進数
1 桁ずつ 10 進数 -> 2 進数に変換する。
9 の次が a になるだけなので、1 桁なら 10 進数 -> 2進数の変換は楽
B6 の場合
- 16 進数で B
- 10 進数で 11
- 2 進数にする
- 8 + 2 + 1
- 2^3 * 1 + 2^2 * 0 + 2^1 * 1 + 2^0 * 1
- 1011
- 16 進数で 6
- 10 進数でも 6
- 2 進数にする
- 4 + 2
- 2^3 * 0 + 2^2 + 2^1 + 2^0 * 0
- 0110
- 合算する
- 10110110
10 進数 <-> 16 進数
- いったん 2 進数を挟む。
16 進数 -> 10 進数
https://www.infraexpert.com/study/ip2.html
B6 の場合
- 2 進数で 1011,0110
- 10 進数で
- 前半: 2^7 + 0 + 2^5 + 2^4
- 128 + 0 + 32 + 16
- 176
- 後半: 2^3*0 + 2^2*1 + 2^1*1 + 2^0*0
- 0 + 4 + 2 + 0
- 6
- 合計: 182
- 結論、182
10 進数 -> 16 進数
182 の場合
2 進数にする
- 128 + 54
- 128 + 0 + 32 + 16 + 0 + 4 + 2 + 0
- 1011,0110
1011,0110 になる
前半、後半と別々の 10 進数にする
8 + 0 + 2 + 1
-> 11
0 + 4 + 2 + 0
-> 6
それぞれ 16 進数にして桁をずらして足す
結論、B6
Top comments (0)