进制也就是进位计数制,是人为定义的带进位的计数方法(有不带进位的计数方法,比如原始的结绳计数法,唱票时常用的“正”字计数法,以及类似的tally mark计数)。对于任何一种进制---X进制,就表示每一位置上的数运算时都是逢X进一位。十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。
名词介绍
进位制/位置计数法是一种记数方式,故亦称 进位记数法/位值计数法,可以用有限的数字符号代表所有的数值。可使用数字符号的数目称为基数(en:radix)或底数,基数为n,即可称n进位制,简称n进制。现在最常用的是十进制,通常使用10个阿拉伯数字0-9进行记数。
对于任何一个数,我们可以用不同的进位制来表示。比如:十进数57(10),可以用二进制表示为111001(2),也可以用五进制表示为212(5),也可以用八进制表示为71(8)、用十六进制表示为39(16),它们所代表的数值都是一样的。
进制一览
十进制
人类天然选择了十进制。
由于人类解剖学的特点,双手共有十根手指,故在人类自发采用的进位制中,十进制是使用最为普遍的一种。成语“屈指可数”某种意义上来说描述了一个简单计数的场景,而原始人类在需要计数的时候,首先想到的就是利用天然的筹算——手指来进行计数。
十进制编码几乎就是数值本身。
数值本身是一个数学上的抽象概念。经过长期的演化、融合、选择、淘汰,系统简便、功能全面的十进制计数法成为人类文化中主流的计数方法,经过基础教育的训练,大多数的人从小就掌握了十进制计数方法。盘中放了十个苹果,通过数苹果我们抽象出来“十”这一数值,它在我们的脑海中就以“10”这一十进制编码的形式存放和显示,而不是其它的形式。从这一角度来说,十进制编码几乎就是数值本身。
十进制的基数为10,数码由0-9组成,计数规律逢十进一。
二进制
二进制有两个特点:它由两个数码0,1组成,二进制数运算规律是逢二进一。
为区别于其它进制,二进制数的书写通常在数的右下方注上基数2,或加后面加B表示,其中B是英文二进制Binary的首字母。
例如:二进制数10110011可以写成,或写成10110011B。对于十进制数可以不加标注,或加后缀D,其中D是英文十进制Decimal的首字母D。计算机领域我们之所以采用二进制进行计数,是因为二进制具有以下优点:
1)二进制数中只有两个数码0和1,可用具有两个不同稳定状态的元器件来表示一位数码。例如,电路中某一通路的电流的有无,某一节点电压的高低,晶体管的导通和截止等。
2)二进制数运算简单,大大简化了计算中运算部件的结构。
二进制数的加法和乘法基本运算法则各有四条,如下:
3)二进制天然兼容逻辑运算。
但是,二进制计数在日常使用上有个不便之处,就是位数往往很长,读写不便,如:把十进制的100000D写成二进制就是11000011010100000B,所以计算机领域我们实际采用的是十六进制。二进制数转换为十六进制数时,长度缩减为原先的约四分之一,把十进制的100000写成八进制就是303240。十六进制的一个数位可代表二进制的四个数位。这样,十进制的100000写成十六进制就是186A0。
四进制
四进制是以4为基数的进位制,以 0、1、2 和 3 四个数字表示任何实数。四进制与所有固定基数的计数系统有着很多共同的属性,比如以标准的形式表示任何实数的能力(近乎独特),以及表示有理数与无理数的特性。有关属性的讨论可参考十进制和二进制,下面是十进制0至15与四进制与二进制的互换。
七进制
七进制是以7为基数的计数系统。使用数码0-6。
七进制小数通常都是循环小数,除非分母是七的倍数。有些小数可以用有限个数字来表示,如:
七进制的乘法表:
在七进制中:
加法运算举例:
1、 2、 3、
数制转换举例:
1、十进制的131转化成七进制数
(七)
2、七进制数245转化成十进制数
七进制的一个好处是,是圆周率的一个很好的近似值。
八进制
由于二进制数据的基数R较小,所以二进制数据的书写和阅读不方便,为此,在小型机中引入了八进制。八进制的基数,有数码0、1、2、3、4、5、6、7,并且每个数码正好对应三位二进制数,所以八进制能很好地反映二进制。八进制用下标8或数据后面加O表示 例如:二进制数据( 11 101 010 . 010 110 100 )2 对应八进制数据 (352.264)或352.264O。
十二进制
十二进制 长度单位一英尺等于12英寸,一先令等于12便士,就连足球比赛罚点球的英制长度也是12码,不过这个12码与十二进制并无关系,巧合而已。
十二进制来源:传说是十个手指头加两只脚。这是过去规定的,20世纪开始规定一打dozen为12个。
规定一打12个是一种12进制。
瑞典历史上有一位有远见的国王就说过,从日常应用的角度看,十二进制比十进制更方便。他生前曾设想过,在他管辖的范围内取消十进制,而代之以十二进制。
直到2015年还能见到十二进制,比如钟表转一圈12小时等等。
有时十进制中的在十二进制中也用表示。
十六进制
由于二进制数在使用中位数太长,不容易记忆,所以又提出了十六进制数。
十六进制数有两个基本特点:它由十六个数码:数字0~9加上字母A-F组成(它们分别表示十进制数10~15),十六进制数运算规律是逢十六进一,即基数,通常在表示时用尾部标志H或下标16以示区别,在c语言中用添加前缀0x以表示十六进制数。
例如:十六进制数4AC8可写成(4AC8),或写成4AC8H。
六十进制
古代人由于生产劳动的需要,要研究天文和历法,就牵涉到时间和角度了。因为历法需要的精确度较高,时间的单位小时,角度的单位度都嫌太大。必须进一步研究他们的小数。它们的小数都具有这样的性质︰使,,,,等都能成为它的整数倍。以作为单位,就正好具有这个性质。譬如︰等于30个,等于20个,等于15个…这种小数的进位制在表示有些数时很方便。例如常遇到的,在十进位制中是一个无限小数,但在这种进位制中就是一个有限小数。
位权概念
对于形式化的进制表示,我们可以从0开始,对数字的各个数位进行编号,即个位起往左依次为编号0,1,2,……;对称的,从小数点后的数位则是-1,-2,……
进行进制转换时,我们不妨设源进制(转换前所用进制)的基为,目标进制(转换后所用进制)的基为,原数值的表示按数位为,在中的表示为R,则有
(由于此处不可选择字体,说明如下:等符号中,n,2,-1等均应改为下标,而上标的幂次均用^作为前缀)
举例:
一个十进制数110,其中百位上的1表示1个,既100,十位的1表示1个,即10,个位的0表示0个,即0。
一个二进制数110,其中高位的1表示1个,即4,低位的1表示1个,即2,最低位的0表示0个,即0。
一个十六进制数110,其中高位的1表示1个,即256,低位的1表示1个,即16,最低位的0表示0个,即0。
可见,在数制中,各位数字所表示值的大小不仅与该数字本身的大小有关,还与该数字所在的位置有关,我们称这关系为数的位权。
十进制数的位权是以10为底的幂,二进制数的位权是以2为底的幂,十六进制数的位权是以16为底的幂。数位由高向低,以降幂的方式排列。
进数转换
1.二进制数、十六进制数转换为十进制数(按权求和)
二进制数、十六进制数转换为十进制数的规律是相同的。把二进制数(或十六进制数)按位权形式展开多项式和的形式,求其最后的和,就是其对应的十进制数——简称“按权求和”.
例如:把(1001.01)2 二进制计算。
解:(1001.01)2
把(38A.11)16转换为十进制数
解:(38A.11)16
整数转换。一个十进制整数转换为二进制整数通常采用除二取余法,即用2连续除十进制数,直到商为0,逆序排列余数即可得到――简称除二取余法.
例:将25转换为二进制数
解:余数1
余数0
余数0
余数1
余数1
所以
同理,把十进制数转换为十六进制数时,将基数2转换成16就可以了.
例:将25转换为十六进制数
解:余数9
余数1
所以
3.二进制数与十六进制数之间的转换
由于4位二进制数恰好有16个组合状态,即1位十六进制数与4位二进制数是一一对应的。所以,十六进制数与二进制数的转换是十分简单的.
(1)十六进制数转换成二进制数,只要将每一位十六进制数用对应的4位二进制数替代即可――简称位分四位.
例:将(4AF8B)16转换为二进制数.
解: 4 A F 8 B
0100 1010 1111 1000 1011
所以
(2)二进制数转换为十六进制数,分别向左,向右每四位一组,依次写出每组4位二进制数所对应的十六进制数――简称四位合一位.
例:将二进制数转换为十六进制数.
解: 0001 1101 0110
1 D 6
所以
转换时注意最后一组不足4位时必须加0补齐4位
数制转换的一般化
1)R进制转换成十进制
任意R进制数据按权展开、相加即可得十进制数据。例如:
2)十进制转换R 进制
1.整数转换——---除R 取余法 规则:(1)用R 去除给出的十进制数的整数部分,取其余数作为转换后的R 进制数据的整数部分最低位数字; (2)再用R去除所得的商,取其余数作为转换后的R 进制数据的高一位数字; (3)重复执行(2)操作,一直到商为0结束。例如:115 转换成 Binary数据和十六进制数数据(图2-4)所以
2.小数转换————---乘R 取整法 规则:(1)用R 去乘给出的十进制数的小数部分,取乘积的整数部分作为转换后R 进制小数点后第一位数字; (2)再用R 去乘上一步乘积的小数部分,然后取新乘积的整数部分作为转换后R 进制小数的低一位数字; (3)重复(2)操作,一直到乘积为0,或已得到要求精度数位为止。
3.小数转换——整数退位法:举例:0.321d转成二进制,由于321不是5的倍数,用取余法、取整法可能要算很久,这时候我们可以采用整数退位法。原理如下:
n为转成的二进制数的小数位数
:计算10进制数,取整
D→T转成2进制数
,T退位,位数不足前端补零
举例:
0.321转成二进制数,保留7位
,取整数41
即
退位,因只有6位而要求保留7位,所以是0.0101001
用在线转换工具校验,正确
and、or、xor运算
所有进制的and(和)、or(或)、xor(异或)运算都要转化为二进制进行运算,然后对齐位数,进行运算,具体的运算方法和普通的and、or、xor相同,如:,,,,,,,,。就是一般的二进制运算。
如: