数制是指数的制式,是人们利用符号计数的一种科学方法。
一、计算机中的各种数制
在计算机中常用的数制有十进制、二进制、八进制和十六进制等。
1. 十进制
十进制是我们经常用到的进位数制,它包括:0、1、2、3、4、5、6、7、8、9
共十个数字符号。这十个数字符号又称为“数码”,每个数码在数中最多可有两个值的概念,一个是数字符号的数值,另一个是该数字符号的权。
举个例子,例如:十进制数34
中的数码3
,其本身的值为3
,它的权为10^1
,所以它实际代表的值是30
。在数学上,数制中数码的个数定义为基数,故十进制的基数为10
。
任何一个十进制数都可以展开成幂级数形式,例如:
423.76 = 4*10^2 + 2*10^1 + 3*10^0 + 7*10^-1 + 6*10^-2
2. 二进制
二进制总共有0
和1
两个数码,任何二进制数都由这两个数码组成。
二进制数的基数为2
,做加法时,遵循逢2
进1
的进位原则。
二进制展开成幂级数形式,如下所示:
10110.11 = 1*2^4 + 0*2^3 + 1*2^2 + 1*2^1 + 0*2^0 + 1*2^-1 + 1* 2^-2
其中,指数2^4、2^3、2^2、2^1、2^0、2^-1、2^-2
为权,2
为基数,其余和十进制时相同。
3. 十六进制
十六进制有0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F
共16
个数码,任何一个十六进制数都是由其中的一些或全部数码构成。
十六进制数的基数为16
,进位计数为逢16
进1
。
十六进制展开成幂级数形式,例如:
63F.B1H = 6*16^2 + 3*16^1 + F*16^0 + B*16^-1 + 1^16^-2
为了区分不同的数制,通常在被标记数后,加上B、D、H
大写字母用来表示二进制、十进制和十六进制。其中十进制的D
可以省略。
二、不同数制间数的转换
1. 二进制和十进制数间的转换
二进制数转换成十进制数只要把要转换数按权展开后相加即可。例如:
10110.11B = 1*2^4 + 0*2^3 + 1*2^2 + 1*2^1 + 0*2^0 + 1*2^-1 + 1* 2^-2 = 22.75
十进制数转换成二进制数的转换过程是上述转换过程的逆过程,但是十进制整数和小数转换成二进制整数和小数的方法是不同的。
(1)十进制整数转换成二进制整数
常用的方法是除2取余法,首先用2
除要转换的十进制数,得到一个商和一个余数,然后继续用2
除上次得到的商,直到商为0
为止,最后把各次余数按最后得到的为最高位,最早得到的为最低为,依次排列起来便得到所求的二进制数。
举例说明:求出231
所对应的二进制数,其竖式为:
按照上图箭头方向将余数排列可得:231 = 11100111B
(2)十进制小数转换成二进制小数
十进制小数转换成二进制小数通常采用乘2取整法,首先用2
去乘要转换的十进制小数,将乘积结果的整数部分提出来,然后继续用2
去乘上次乘积的小数部分,直到所得积的小数部分为0
或满足所需精度为止,最后把各次整数按最先得到的为最高位、最后得到的为最低位,依次排列起来便得到所求的二进制小数。
举例说明:把十进制小数0.6879
转换为二进制小数,其解法为:
按照上图箭头方向将整数排列可得:0.6879 ≈ 0.1011B
需要注意的是:任何十进制整数都可以精确地转换成一个二进制整数,但任何十进制小数却不一定可以精确地转换成一个二进制小数。
2. 十六进制和十进制数间的转换
(1)十六进制数转成十进制数
十六进制数转换成十进制数的方法和二进制数转换成十进制数的方法类似,即把十六进制数按权展开后相加,例如:
3FEAH = 3*16^3 + 15*16^2 + 14*16^1 + 10*16^0 = 16362
(2)十进制数转成十六进制数
1)十进制整数转成十六进制整数
十进制整数转换成十六进制整数,采用的是除16取余法。和十进制转成二进制的方法类似,用16
连续去除要转换的十进制整数,直到商数小于16
为止,然后把各次余数按逆序排列起来所得的数,便是所求的十六进制数。
举例说明:把十进制数3901
转换成十六进制数,其解法为:
因此,3901 = F3DH
2)十进制小数转成十六进制小数
十进制小数转换成十六进制小数的方法是乘16取整法,即把欲转换成十六进制小数的十进制小数连续乘以16
,直到所得乘积的小数部分为0
或达到所需精度为止,最后把各次整数按最先得到的为最高位,最后得到的为最低位,依次排列起来便得到所求的十六进制小数。
举例说明:求0.76171875
所对应的十六进制数,其解法为:
因此,0.76171875 = 0.C3H
3. 二进制和十六进制数间的转换
二进制和十六进制间的转换十分方便,这就是为什么人们要采用十六进制对二进制加以表达的原因了。
(1)二进制数转成十六进制数
二进制数转成十六进制数采用四位合一位法,即从二进制的小数点开始,或左或右每四位一组,不足四位以零补位,然后分别把每组用十六进制数码表示,并按序相连。
举例说明:将1101111100011.10010100B
转成十六进制数,其解法为:
因此,1101111100011.10010100B = 1BE3.94H
(2)十六进制数转成二进制数
转换方法是把十六进制数的每位分别用四位二进制数码表示,然后把它们连成一体。
举例说明,把十六进制数3AB.7A5
转成二进制数,其解法为:
因此,3AB.7A5H = 1110101011.011110100101B
三、二进制数的计算
在计算机中,运算分为算术运算与逻辑运算两类。算术运算包括:加、减、乘、除运算;逻辑运算包括:逻辑乘、逻辑加、逻辑非、逻辑异或等。
1. 算术运算
(1)加法运算
二进制的加法法则是:
0 + 0 = 0
1 + 0 = 0 + 1 = 1
1 + 1 = 0(向邻近高位进位)
1 + 1 + 1 = 1(向邻近高位进位)
(2)减法运算
二进制的减法法则是:
0 - 0 = 0
1 - 1 = 0
1 - 0 = 1
0 - 1 = 1(向邻近高位借1当作2)
两个二进制数相减时,要先判断它们的大小,把大数作为被减数,小数作为减数,差的符号由两数关系决定。
在减法过程中要注意低位向高位借的1
应当作2
。
(3)乘法运算
二进制乘法法则是:
0 * 0 = 0
1 * 0 = 0 * 1 = 0
1 * 1 = 1
两个二进制数相乘与两个十进制数相乘类似,可以用乘数的每一位分别去乘以被乘数,所得结果的最低位与相应乘数位对齐,最后把所有结果加起来,便得到积。
举例说明:两个四位的二进制数1101B
和1001B
相乘,其解法为:
被乘数 1101B
乘数 X 1001B
------------------------------
1101
0000
0000
1101
------------------------------
乘积 1110101B
在计算机中,普遍采用部分积左移和部分积右移的方法。前者从乘法最低位向高位逐位进行,后者从乘法最高位向低位进行,其本质异曲同工。
部分积右移法采用边相乘边相加的方法,每次加被乘数或0
时总要先使部分积右移,而被乘数的位置可保持不变。
(4)除法运算
除法是乘法的逆运算,二进制除法也是从被除数的最高位开始,查找出够减除数的位数,并在其最低位处上商1
和完成它对除数的减法运算,然后把被除数的下一位移到余数位置上;若余数不够减除数,则上商0
,并把被除数的再下一位移到余数位置上;若余数够减除数,则上商1
并进行余数减除数。这样重复进行,直到全部被除数的各位都下移到余数位置上为止。
2. 逻辑运算
逻辑运算由专门的逻辑电路完成。
(1)逻辑乘运算
逻辑乘又称逻辑与,常用ʌ
符号表示。逻辑乘运算法则为:
0 ʌ 0 = 0
1 ʌ 0 = 0 ʌ 1 = 0
1 ʌ 1 = 1
(2)逻辑加运算
逻辑加又称逻辑或,常用算符v
表示。逻辑加的运算规则为:
0 v 0 = 0
1 v 0 = 0 v 1 = 1
1 v 1 = 1
(3)逻辑非运算
逻辑非运算又称逻辑取反,常采用-
运算符表示。运算规则为:
非0 = 1
非1 = 0
(4)逻辑异或
逻辑异或又称为半加,是不考虑进位的加法,常采用⊕
算符表示。逻辑异或的运算规则为:
0 ⊕ 0 = 1 ⊕ 1 = 0
1 ⊕ 0 = 0 ⊕ 1 = 1
异或运算可用于把某数的若干位取反。异或运算还可用于乘除法运算中的符号位处理。