数制也称计数制,是用一组固定的符号和统一的规则来表示数值的方法。任何一个数制都包含如下基本概念:数码、基数、数位、位数、位权和计数单位。不同数制间可以进行进制转换。计算机中最常见的数制有二进制数制、八进制数值和十六进制数制,生活中最熟悉的则是十进制数制,当然,十进制数制在编写代码时,常用于表示数值大小。
以十进制数制为例,介绍数制的相关基本概念。
数码指数制中用于表示基本数值大小的不同数字符号。十进制有10个数码,分别为0,1,2,3,4,5,6,7,8,9。 基数指数制所使用数码的个数。十进制的基数为10。
数位指一个数中数码所占的位置。例如十进制整数520,从右至左,0的数位是个位、2的数位是十位,5的数位是百位。 位数指的是数中数位的个数。例如十进制整数520有三个数位,所以位数为3。
位权指的是数制中某一数位上的1所表示数值的大小(所处位置的权值)。例如,十进制整数520,从右至左,0的位权是1,2的位权是10,5的位权是100。
计数单位指的是数值中对位权的称谓。对于十进制整数520,从右至左,0的位权是1,计数单位是个,2的位权是10,计数单位是十,5的位权是100,计数单位是百,后面还有千、万、十万、百万、千万、亿、十亿、百亿、千亿……,这些都是计数单位。有了计数单位,我们就可以将520读作“五百二十”。计数单位与位权的区别在于,位权是对计算单位的量化,计数单位是对位权的表述。
生活中除了常用的十进制数制,也使用形形色色的进制。在新中国成立之前,重量单位一直采用的是半斤等于八两的换算,以前从两到斤,采用的是16进制,16两为1斤,那时候半斤和八两是同一个意思,所以有“半斤八两”这一成语。新中国成立之后,为与国际接轨又考虑使用习惯,将一斤改为10两,一公斤定位1KG。时间上,使用的60进制,每60秒为一分钟,每60分钟为1小时。从小时到天则使用24进制,每24小时为1天。从天到星期,采用的是7进制,7天为1星期,从月到年,采用的是12进制,12个月为1年,等等。
对于计算机而言,则使用二进制对数据进行表示,而不是人类使用的10进制。其理由主要有以下四点: (1)电路简单。实现二进制存储和运算的逻辑电路比较简单,容易使用开关电路(或逻辑电路)来实现。 (2)可靠性高。2进制只有0和1两个数码,数据的传送和处理都不容易出错。用电路实现2进制运算时,电路可靠,抗干扰能力强。 (3)运算简单。2进制的运算规则简单,不论加法规则还是乘法规则,都比较简单,从而简化实现运算规则的电路逻辑,提高运算速度。相对而言,10进制的运算规则要复杂很多,例如九九乘法表就是10进制的乘法规则。 (4)逻辑性强。逻辑代数中的值只有“真”和“假”,使用2进制十分容易表示逻辑值并实现逻辑运算。
在书写代码时,C++中不同进制的数值表示方法如下:
数制 | 书写方式 | 示例 |
---|---|---|
二进制 | C++14开始支持直接书写二进制数,数值前加0b或0B | uint8_t a=0b00010001;uint8_t a=0B00010001; |
八进制 | 数值前加零 | uint8_t a=021; |
十进制 | 直接书写 | uint8_t a=17; |
十六进制 | 数值前加0x或0X | uint8_t a=0x11;uint8_t a=0X11; |
[1]数制.百度百科 [2]数位.百度百科 [3]数制与编码 [4]C++14.百度百科