【编程基础】常用进制及其转化

434 阅读3分钟

在学习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. 常用进制之间的转化(整数)

十进制二进制十六进制
000000
100011
200102
300113
401004
501015
601106
701117
810008
910019
101010a/A
111011b/B
121100c/C
131101d/D
141110e/E
151111f/F

n进制 -> 十进制

  • 无符号:该位置的基数 X 该位置的权重,然后所有位置的和相加。
  • 有符号:最高位是符号位,其余位按照上面的规则运算。

十进制 -> n进制

  • 除n取余,直至商零,余数倒序排列

5. 常用进制之间的转化(浮点数)

十进制小数 -> 二进制浮点数

  • 整数部分:按照十进制整数的方法转化(除n取余,直至商零,余数倒序排列
  • 小数部分:乘2取整,直至小数部分为零,取出的整数正序排列(如不为零,则按要求保留足够位数的小数,最后一位0舍1入)

二进制浮点数 -> 十进制小数

  • 所有位按权重相加