为啥要会进制转换?
- 提效
- 代码中的装逼最为致命
C语言中各进制声明及占位符
- 二:程序中没有二进制数
- 八:%o 0开头,如int a = 010
- 十:%d int a =2
- 十六:%x(小写输出) %X(大写输出) 0x开头,如int a =0x10
16以内各进制数
请死记硬背,可提高效率
十进制 |
二进制 |
八进制 |
十六进制 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
2 |
10 |
2 |
2 |
3 |
11 |
3 |
3 |
4 |
100 |
4 |
4 |
5 |
101 |
5 |
5 |
6 |
110 |
6 |
6 |
7 |
111 |
7 |
7 |
8 |
1000 |
10 |
8 |
9 |
1001 |
11 |
9 |
10 |
1010 |
12 |
A |
11 |
1011 |
13 |
B |
12 |
1100 |
14 |
C |
13 |
1101 |
15 |
D |
14 |
1110 |
16 |
E |
15 |
1111 |
17 |
F |
16 |
10000 |
20 |
10 |
十进制转二八十六进制
将十进制数每次除以n(n为2,8,16), 取出余数 按照结果倒叙依次获取结果
转二进制:
109:109/2=54余1 54/2=27余0 27/2=13余1 13/2=6余1 6/2=3余0 3/2=1余1 1/2=0余1 倒叙 1101101
转八进制、十六进制亦如是
二八十六进制转十进制
权值法:将各类型数的各个位数从0位开始乘以 (2,8,16) 的N(N为位置)幂 将各个位数的结果相加
二进制转:
10101: 2^4+0+2^2+2^0 = 21
八进制转:
2756 : 2*8^3 + 7*8^2 + 5*8^1 + 6*8^0 = 1518
十六进制转:
DA19 : 13*16^3 + 10*16^2 + 1*16^1 + 9*16^0 = 55833
八进制二进制互转
8进制最大数为7,也就是二进制中的111,三位最大数,这三位对应的值为4,2,1,所以八进制中每一位代表三位二进制数
八进制转二进制
3 5 6 7
011 101 110 111二进制转八进制
110 101 001 011 110 111 001 011
6 5 1 3 6 7 1 3
十六进制与二进制互转
十六进制最大数15,也就是1111,二进制的四位最大数,这四位对应8,4,2,1所以十六进制中每一位数代表四位二进制数
十六进制转二进制
A B C D
1010 1011 1100 1101
二进制转十六进制
0101 1101 1111 1010 0101 0001
5 D F A 5 1
十六进制与八进制互转:以二进制为中转
十六进制--->二进制---->八进制
八进制------>二进制----->十六进制