我在学习的时候进制这个东西让我觉得很难懂,反正学了很久,不知道有没有认识和我一样的,所以必须记录一下,以便日后复习。
文中可能有我没有表达清楚或错误的地方欢迎大家指出来。
什么是进制
进制就是逢几进几,举个例子:
- 二进制就是逢二进一
- 八进制就是逢八进一
- 十进制就是逢十进一
- 十六进制就是逢十六进一
N进制
- 逢N进1就是N进制
十进制- 十个基数,逢十进一
- 基数:0 1 2 3 4 5 6 7 8 9
二进制- 二个基数,逢二进一
- 基数:0 1
那么怎么把二进制数转换为十进制数呢,下面是两个进制相对应的表现形式,只是因为他们的进制不一样所以表现形式也不一样。
举个例子,如果将十进制数的四转化为二进制数可以用一下以下式子熟悉了一下就算出来了。
我们用二进制的三也就是十一来加上一,逢二进一就往前面进一得到的结果是 100也就是十进制的四,这样应该很容易理解吧。
八进制
- 八个基数,逢八进一
- 基数:0 1 2 3 4 5 6 7
十六进制(这个我也弄了很久才弄懂)
- 十六个基数,逢十六进一
- 这里十六进制一定是有0-9对吧,0-9只有十个数,那不够啊,后面的数字应该用什么表示呢?不够的可以用字母表示A表示10,一直到F
- 那么十六进制的基数就是:0 1 2 3 4 5 6 7 8 9 A B C D E F
那十进制的16用十六进制表示是什么呢?
我们还是列个式子(我个人是这么理解的有错请指出)
得到的结果是 10再加上一个11 得到的是 1011 这就是十六进制中的16
- 十进制数的0-15在十六进制中用:0 1 2 3 4 5 6 7 8 9 A B C D E F 表示
- 十进制数的16-31在十六进制中用:10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 表示
- 十进制数的32-47在十六进制中用:20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 表示
常用的进制表
十进制(D) | 二进制(B) | 八进制(O) | 十六进制(H) |
---|---|---|---|
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 |
问题1:八进制中的17为什么对应的是是十进制中的15?
首先我们来看这个八进制中17的这个7就代表十进制中的7,
前面这个1是有8才能进一也就是八进制中的17=7+8=15,
那么第二个问题八进制23对应的十进制是多少?
通过对上面的例子举一反三,我们知道了23中的3就是3不变,2代表进了两位,
也就是23=3+8=8=19
也可以是23=3+(8×2)=19
问题2:十进制中的88转换为16进制该怎么计算?
算式:88÷16=5 (得到进了几次位)
然后: 5×16=80 88-80=8 (得到剩余的数)
最后的结果就是两个结果合并也就是:58
问题3:将32C以十进制输出该怎么计算?
3 2 C
┃ ┃ ┃
┃ ┃ ┗12(因为十六进制中C代表12)
┃ ┗2×16(因为进了两次位,所以等于两个16)
┗3×16²(这个平方是因为位数有三位分别代表:C零次方 2C一次方 32C二次方,不知道这么说你们能不能理解,我只能这样解释了,我不太会解释...)算式:3×16^2+(2x16)+12=812(这个结果就是转换为十进制的数字啦)
问题3:将五进制中的24转换为10进制是多少?
算式:(24)₅=4+(2×5)=14(看了上面的这里应该都懂吧)
生活中用到进制的例子
- 一周七天:七进制
- 一年十二个月:十二进制
- 一小时六十分钟:六十进制
- 电脑中的数据:二进制
C语言规定八进制前要加0(注意是零不是字母o),十六进制前要加0x或0X,十进制前什么都不加!
比如十进制中的 5,如果你希望它变成八进制就在他前面加上一个 0 成为05
如果希望是十六进制 就再加上一个x或X 成为 0x5或0X5(0x等价0X)
不同进制数的表示
在汇编中:在数字后加字母B表示二进制数,加字母O表示八进制数,加字母D表示十进制数,加字母H表示十六进制数。
例:
- 1011B为二进制数1011,也记为(1011)₂
- 1357O为八进制数1357,也记为(1357)₈
- 2049D为十进制数2049,也记为(2049)₁₀
- 3FB9H为十六进制数3FB9,也记为(3FB9)₁₆
再来说说C语言中的 printf 的用法
- %d表示以十进制输出
- %x或%X表示以十 六进制输出(%x等价%X)
- %o表示以八进制输出