在学习C语言、数字电路、微机原理、FPGA等等众多课程时,首先讲述的都是进制及其转化,学习了这么多遍,我们真的理解进制吗?
1. 什么是进位计数制(进制)
进制,全名叫做进位计数制,就是同一个量的不同计数方式。
一组数字,从右向左位置依次升高,同样的数字,所在位置不同,表示的大小不同,这个大小就取决于进制。
通俗一点来说就是:进制决定了逢几进一。
2. 常用进制
十进制
- 基数:0、1、2、3、4、5、6、7、8、9
人们生活中使用的是十进制,历史悠久,我还真说不上具体的原因~
二进制
- 基数:0、1
二进制只有0和1两个状态,可以用有/无表示(磁性),也可以用高/低(电压)来表示,在数字电路的世界中广泛使用,进而在计算机的世界中也被广泛使用。
十六进制
- 基数:0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f
在使用计算机时,为了编码和理解的方便,人们在十进制和二进制之间建立了十六进制,即:用一个十六进制数表示4个二进制数。
八进制
- 基数:0、1、2、3、4、5、6、7
八进制基本上没用过,不知道怎么就发明了这种东西,了解一下就好啦~
3. 不同进制在程序中的表示
3.1. 汇编语言
- 十进制: 后缀D(eg. 1234D)
- 二进制: 后缀B(eg. 1011B)
- 十六进制: 后缀H(eg. 82CEH)
- 八进制: 后缀O(eg. 7162O)
3.2. 高级语言
- 十进制:直接书写
- 二进制:不可以写,用十六进制代替
- 十六进制:前缀0X或者0x
- 八进制:前缀0(是零,不是大写字母O)
4. 常用进制之间的转化(整数)
| 十进制 | 二进制 | 十六进制 |
|---|---|---|
| 0 | 0000 | 0 |
| 1 | 0001 | 1 |
| 2 | 0010 | 2 |
| 3 | 0011 | 3 |
| 4 | 0100 | 4 |
| 5 | 0101 | 5 |
| 6 | 0110 | 6 |
| 7 | 0111 | 7 |
| 8 | 1000 | 8 |
| 9 | 1001 | 9 |
| 10 | 1010 | a/A |
| 11 | 1011 | b/B |
| 12 | 1100 | c/C |
| 13 | 1101 | d/D |
| 14 | 1110 | e/E |
| 15 | 1111 | f/F |
n进制 -> 十进制
- 无符号:该位置的基数 X 该位置的权重,然后所有位置的和相加。
- 有符号:最高位是符号位,其余位按照上面的规则运算。
十进制 -> n进制
- 除n取余,直至商零,余数倒序排列
5. 常用进制之间的转化(浮点数)
十进制小数 -> 二进制浮点数
- 整数部分:按照十进制整数的方法转化(除n取余,直至商零,余数倒序排列)
- 小数部分:乘2取整,直至小数部分为零,取出的整数正序排列(如不为零,则按要求保留足够位数的小数,最后一位0舍1入)
二进制浮点数 -> 十进制小数
- 所有位按权重相加。