2 進数 <-> 10 進数 ( Binary <-> Decimal )
2 進数 -> 10 進数
2 ^ (桁数 -1) を桁分繰り返して足す。
つまり 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
別解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
10 進数と 2 進数で桁が上がるところを覚える
キリがいい数なら、一撃で出せる
- 4: 100
- 8: 1,000 3: 16: 10,000 4: 128: 10,000,000
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)