进制转换:一篇就够了
2进制(BIN),8进制(OCT / octonary),10进制(DEC / decimal),16进制(HEX / hexadecimal)
一、任意进制 → 10进制
- [例] (241)16 转换为10进制:
= 2*162 + 4*161 + 1*160
= 2*256 + 4*6 + 1
= 537 - [例] (110)2 转换为10进制:
= 1*22 + 1*21 + 0*20
= 4 + 2 + 0
= 6
二、2进制与8/16进制互转
- [例] (123)16 转换为2进制:
- 首先按位转换:1 -> 0001、2 -> 0010、3 -> 0011
- 最后拼接得:000100100011
- [例] (10100011)2 转换为8进制:
- 首先按每3位分割转换为对应的八进制数:010 -> 2、100 -> 4、011 -> 3
- 最后拼接得:243
- [例] (10 1010 0011)2 转换为16进制:
- 首先按每4位分割转换为对应的十六进制数:0010 -> 2、1010 -> A、0011 -> 3
- 最后拼接得:2A3
- 记住下表
8进制位 对应的2进制 16进制位 对应的2进制 0 000 0 0000 1 001 1 0001 2 010 2 0010 3 011 3 0011 4 100 4 0100 5 101 5 0101 6 110 6 0110 7 111 7 0111 8 1000 9 1001 A 1010 B 1011 C 1100 D 1101 E 1110 F 1111
三、10进制 → 2进制(8进制、16进制)
除2取余法:不断除以2(或 8、16),保留余数,商为0时不再继续除,将所有余数倒序排列即为所求得2(8、16)进制数
- [例] 求 (13)10 的 2进制表示:
13 / 2 商 6 余 1
6 / 2 商 3 余 0
3 / 2 商 1 余 1
1 / 2 商 0 余 1
故13对应得2进制数为 1101 - [例] 求 (3658)10 的 16进制表示:
3658 / 16 商 216 余 2
216 / 16 商 13 余 8
13 / 16 商 0 余 13(D)
故 3458 对应的16进制为 D82
*可以选择记住下表:
10进制数 | 对应2进制形式 |
---|---|
127 | 0111 1111 |
128 | 1000 0000 |
192 | 1100 0000 |
224 | 1110 0000 |
240 | 1111 0000 |
248 | 1111 1000 |
252 | 1111 1100 |
254 | 1111 1110 |
255 | 1111 1111 |
32767 (short 类型所能表示的最大正数) | 0111 1111 1111 1111 |
32768 | 1000 0000 0000 0000 |
65535 (IPv4 的最大端口号) | 1111 1111 1111 1111 (2字节,16位) |
65536 | 0001 0000 0000 0000 0000 |