为啥要会进制转换?
- 提效
- 代码中的装逼最为致命
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
十六进制与八进制互转:以二进制为中转
十六进制--->二进制---->八进制
八进制------>二进制----->十六进制