3.1 进制转换
内容导视:
- 二进制与十进制互转
- 二进制与八进制互转
常用进制如下:
-
二进制:0、1,满 2 进 1
-
十进制:0 ~ 9,满 10 进 1
-
八进制:0 ~ 7,满 8 进 1
-
十六进制:0 ~ F,满 16 进 1
十六进制中,超过 9 的部分与十进制的对应关系,A:10,B:11,C:12,D:13,E:14,F:15。
89:十进制
0b100:二进制的前面加上 0b
015 :八进制的前面加上 0
0xFF:十六进制的前面加上 0x
3.1.1 二进制与十进制互转
二进制转十进制
将每位上的数乘以 2 的(所处位数 - 1)次方,求和。
例 1:0b100 转为十进制
0b100 =
1 * 2 ^ 2
+ 0 * 2 ^ 1
+ 0 * 2 ^ 0
= 4
所以 0b100 对应的十进制为 4
例 2:0b10101010 转为十进制
由于 0 乘以什么都是 0,故而省去。
0b10101010 =
1 * 2 ^ 7
+ 1 * 2 ^ 5
+ 1 * 2 ^ 3
+ 1 * 2 ^ 1
= 128 + 32 + 8 + 2
= 170
所以 0b10101010 对应的十进制为 170
十进制转二进制
十进制数除以 2 得到商,再将商除以 2,如此反复,直到商为 0,然后将每步得到的余数倒过来,就是对应的二进制。
例 1:5 转为二进制
5/2,商 2,余 1
2/2,商 1,余 0
1/2,商 0,余 1
所以 5 对应的二进制为 0b101
例 2:147 转为二进制
147/2,商 73,余 1
73/2,商 36,余 1
36/2,商 18,余 0
18/2,商 9,余 0
9/2,商 4,余 1
4/2,商 2,余 0
2/2,商 1,余 0
1/2,商 0,余 1
所以 147 对应的二进制为 0b10010011
十进制与八进制互转、十进制与十六进制互转,类似于十进制与二进制互转,只不过把 2 换成 8、16 而已。
例 3:0124 转十进制
0124 =
1 * 8 ^ 2
+ 2 * 8 ^ 1
+ 4 * 8 ^ 0
= 64 + 16 + 4
= 84
所以 0124 对应的十进制为 84
例 4:241 转十六进制
241/16,商 15,余 1
15/16,商 0,余 F
所以 241 对应的十六进制为 0xF1
3.1.2 二进制与八进制互转
二进制转八进制
0b000 ~ 0b111 对应 0 ~ 7,每三位二进制数可以表示 0 ~ 7 之间的数,即一个八进制数。
从右边开始,二进制数每三位一组,转成对应的八进制数,不够三位补 0,拼起来即可:
0b000 0
0b001 1
0b010 2
0b011 3
0b100 4
0b101 5
0b110 6
0b111 7
0b001000 10
0b001001 11
...
0b111111 77
例 1:0b11101 转为八进制
101:5
011:3
所以 0b11101 对应的八进制数为 035
例 2:0b101111011 转为八进制
011:3
111:7
101:5
所以 0b101111011 对应的八进制数为 0573
八进制转二进制
上述的逆过程,将八进制的每位,转成对应的一个 3 位的二进制数,拼起来即可。
例 1:0241 转为二进制数
0241
2:010
4:100
1:001
所以 0241 对应的二进制是 0b10100001
例 2:02371 转为二进制数
02371
2:010
3:011
7:111
1:001
所以 02371 对应的二进制数为 0b10011111001
同理二进制与十六进制转换,由于 0b0000 ~ 0b1111 对应 0 ~ 15,每 4 位二进制数可以表示 1 个十六进制数。
0b0000 0x0
0b0001 0x1
0b0010 0x2
0b0011 0x3
0b0100 0x4
0b0101 0x5
0b0110 0x6
0b0111 0x7
0b1000 0x8
0b1001 0x9
0b1010 0xA
0b1011 0xB
0b1100 0xC
0b1101 0xD
0b1110 0xE
0b1111 0xF
0b00010000 0x10
...
0b11111111 0xFF
例 3:0b111101010 转为十六进制
1010:A
1110:E
0001:1
0b111101010 对应的十六进制为 0x1EA
例 4:0xFAD8 转为二进制
F:1111
A:1010
D:1101
8:1000
所以 0xFAD8 对应的二进制为 0b1111101011011000