⼆进制补码记数法和余码记数法
⽬前,计算机表⽰整数普遍采⽤的就是⼆进制补码记数法。它是⽤固定数⽬的⼆进制位来表⽰整数,通常是32位。如1表⽰成00000000 00000000 00000000 00000001
但这⾥,为了⽅便,我们先看看3位⼆进制和4位⼆进制:
补码记数法
位模式所表⽰的值位模式所表⽰的值
--01117
--01106
--01015
--01004
011300113
010200102
001100011
000000000
111-11111-1
110-21110-2
101-31101-3
100-41100-4
--1011-5
--1010-6
--1001-7
--1000-8
在⼆进制补码系统中,最左边的⼆进制位指明所标⽰数值的符号,称为符号位。其中,1表⽰负数,0表⽰⾮负数(包括⾃然数0)。
⼆进制补码系统是这样构成的:
1. 对于⾮负数:先规定适当长度的⼀组⼆进制0,使⽤⼆进制计数,从右向左,直到只有⼀个0,其他都是1的模式形成。这样形成的数
有0、1、2、3……
补码的最小负数2. 对于负数:先规定适当长度的⼀组⼆进制1,使⽤⼆进制反向计数,从右向左,直到只有⼀个1,其他都是0的模式形成。这样形成的
数有-1、-2、-3……。其中,反向计数让很多⼈难以理解,你可以从表格的底部开始计数。
总结⼀下:
⼆进制补码系统,以0开头表⽰⾮负数,以1开头表⽰负数。
因为⾮负数中包括0,所以对于4位模式的数字,其能表⽰的最⼤正数为2^3-1 = 7,但负数中不包括0,所以其能表⽰的最⼩的负数为-2^3 = -8。
求正数的负数⼆进制表⽰
对⽐表格中的数所对应的⼆进制表⽰,你会发现很有意思的⼀点:0和-1的⼆进制是按位取反的,1和-2也是如此,2和-3同样……
这是⼀个很有趣的发现。但是我们更希望建⽴⼀个1和-1,2和-2,3和-3……之间的关系,⽽不是0和-1,1和-2,2和-3……。
那么如何根据⼀个数的正数⼆进制形式,写出相对应的负数⼆进制呢?⽐如,已知6的⼆进制为0110,怎么样写出-6的⼆进制呢?
很简单:以6的⼆进制0110为例,从右向左看,在遇到第⼀个1之前(包括第⼀个1),都依次抄写,在第⼀个1之后的所有⼆进制位都依次取反。
那么,从右向左看,6的⼆进制0110的右边第⼀位是0,则-6的右边第⼀位也为0;右边的第⼆位是1(为第⼀个1),则-6的右边第⼆位也为1;右边的第三位为1(在第⼀个1之后,所以依次取反),则-6的右边第三位为0;右边的第四位为0,则-6的右边第四位为1。所以-6的⼆进制为1010。
求负数的正数⼆进制表⽰
已知正数的⼆进制表⽰,求其负数的⼆进制表⽰也是⼀样的规则:从右向左看,在遇到第⼀个1之前(包括第⼀个1),都依次抄写,在第⼀个1之后的所有⼆进制位都依次取反。
⼆进制补码记数法中的加法
使⽤⼆进制补码记数法主要是为了简化计算机电路设计,它可以使得减法转化为加法。⽽加法的电路设计是很简单的,主要是运⽤逻辑电路实现,但减法电路的设计通常很困难。所以通过⼆进制补码记数法,可以使得减法运算变成加法,使⽤同⼀套电路。
⽐如:7-2=5,可以转化为7+(-2)=5。其中-2就是通过2的⼆进制转化来的。
值得⼀提的是,在计算过程中,包括答案的所有位模式长度都是相同的。从右向左运算时,最后⼀位可能产⽣进位,会造成答案多出⼀位。这时,需要把这多出的⼀位删除掉。不⽤担⼼删除过后正确性会造成影响,其实删除掉过后的答案才是正确的。⽐如
0101+0010=0111,⼜⽐如0111+1011=0010(0111+1011=10010,缩减为0010)。就是这么神奇!
使⽤⼆进制补码计数法的计算机只要学会加法就可以了,计算机需要⼀个加法电路和⼀个取负电路。
加法的溢出问题
因为使⽤⼆进制补码系统时,位数是固定的,所以可以表⽰的数值⼤⼩也是有限制的。⽐如说,4位模式的⼆进制补码系统,所能表⽰的最⼤正整数是7,最⼩负整数是-8。所以,9就⽆法表⽰,5+4你不会得到正确的结果9,⽽会得到-7。
溢出指的是,计算的结果超出了可以表⽰的数值范围。
可以分三种情况讨论:
1. 正数+正数:这时可能发⽣溢出问题。如果两个正数的和为负数,毫⽆疑问,发⽣了溢出。
2. 负数+负数:这时也可能发⽣溢出。如果两个负数的和为正数,肯定发⽣了溢出。
3. 正数+负数:这时运算结果不会发⽣溢出问题。除⾮两个参与运算的数本⾝已经溢出了。
简单地说,两个正数的和为负,或者两个负数的和为正,那么肯定发⽣了溢出。
不⽤太过担⼼这个问题,因为我们实际使⽤的位模式都是32位,或者64位的,可以表⽰的数⾮常⼤。
余码记数法
除了补码记数法,还有⼀种记数⽅法是余码记数法。它跟补码记数法很类似,只有⼀点区别:它的符号位使⽤1表⽰正数,使⽤0表⽰负数。
位模式所表⽰的值
1113
1102
1011
1000
011-1
010-2
001-3
000
-4
位模式所表⽰的值问题与练习:
1.将下⾯每⼀个⼆进制补码表⽰转换为相应的⼗进制形式。
2.⽤8位位模式将下列每⼀个⼗进制表⽰转换为相应的⼆进制补码形式。
3.假定下列位模式表⽰的是⽤⼆进制补码计数法存储的数值,求出每⼀个值的负值的⼆进制补码表⽰。
4.假定⼀台机器⽤⼆进制补码记数法存储数值,如果及其分别采⽤下列长度的位模式,那么可以存储的最⼤数和最⼩数分别是什么?
5.计算下列由⼆进制补码记数法表⽰的问题,按照⼆进制补码记数法求出他们的答案。要注意观察可能会产⽣的溢出问题。
6.在⼆进制补码记数法⾥,⼀个整数和⼀个负数相加时会产⽣溢出吗?请说明理由。
a. 00011 b .01111 c .11100
a .6 b.-6 c.-17
a. 00000001 b .11111110 c. 01010101
a .4
b .6
c .8
a. 0100
b. 0101
c. 1010 +0011 +0110 +1010
—————— —————— ——————
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论