数学家长久以来对数字记数系统很感兴趣,计算机中常用的两种整数的记数系统为二进制补码记数法和余码记数法。都基于二进制,但特性不同。
1.6.1 二进制补码记数法
现今系统中二进制补码记数法用的很普遍,其中每个数值用一个32位的模式表示。位模式中最左端的位为符号位,0代表非负数,1代表负数
32模式可以表示很大的数值,但不利于学习。因此用较少的位模式来表示数字。
假设用3位模式表示数值:
000代表了十进制0
正数:在000的基础上开始二进制计数,直到最高位为0,其他都是1为止。代表的是该模式所能表示最大的十进制非负数
负数:111 代表-1,然后反向计数(每次计数做减法),直到最高位为1,其他位都为0为止。代表的是该模式所能表示最小的十进制负数
二进制补码系统中,绝对值相等的数在位模式上也相近。例如:0110 与 1010。两个数都从右往左读,遇到位模式上第一个1时,以这个1为分界线,1右边这两个数的模式,也是之前读到的位取值都是一样的。1左边这两个数的模式互为补码。这样,绝对值相同的位模式,我们可以在正负之间方便的转换。
了解了二进制补码系统的正负转换方法,当遇到符号位为1的二进制数要转换为十进制数时,我们只需要把这个数的位模式转换成绝对值的位模式得到它的绝对值,便得到了这个二进制负数的十进制负值。
1. 二进制补码记数法中的加法:
0101 + 0010 = 0111
0111 + 1011 = 0010 (10010,两个数的位模式最大为4位,因此从最高位舍去1位)
途中最后一个加法,说明了任何带符号数字组合的加法都可以用相同的算法来得出值,所以也可以用相同的电路。那么计算机只需要加法电路就可以满足加减法,只需要一个加法电路和取负电路就可以做加减法。
2.溢出问题:
4位模式中最大能表示的正整数为7,最小的负整数为-8。如果计算4+5的话得到的结果不为9而是-7,这种情况即计算的结果超过模式可表示的数的范围,称为溢出。检查位模式的符号位即能发现是否溢出。解决溢出,我们可以使用更长的位模式,或者改变度量单位
1.6.2 余码记数法
余码记数法的和补码记数法的区别就是符号位正好相反