定点补码的加减法规则
- 格式:ppt
- 大小:218.50 KB
- 文档页数:16
1.第一篇数值在计算机中表示形式为机器数,计算机只能识别0和1,使用的是二进制,而在日常生活中人们使用的是十进制,"正如亚里士多德早就指出的那样,今天十进制的广泛采用,只不过我们绝大多数人生来具有10个手指头这个解剖学事实的结果.尽管在历史上手指计数(5,10进制)的实践要比二或三进制计数出现的晚."(摘自<<数学发展史>>有空大家可以看看哦~,很有意思的).为了能方便的与二进制转换,就使用了十六进制(2 4)和八进制(23).下面进入正题.数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机器数的原码了.假设机器能处理的位数为8.即字长为1byte,原码能表示数值的范围为(-127~-0 +0~127)共256个.? 有了数值的表示方法就可以对数进行算术运算.但是很快就发现用带符号位的原码进行乘除运算时结果正确,而在加减运算的时候就出现了问题,如下: 假设字长为8bits( 1 )?10-? ( 1 )10?=? ( 1 )10?+ ( -1 )10?= ?( 0 )10(00000001)原?+ (10000001)原?= (10000010)原?= ( -2 )?显然不正确.? 因为在两个整数的加法运算中是没有问题的,于是就发现问题出现在带符号位的负数身上,对除符号位外的其余各位逐位取反就产生了反码.反码的取值空间和原码相同且一一对应. 下面是反码的减法运算:?( 1 )10?-? ( 1 )?10=? ( 1 )?10+ ( -1 )?10= ?( 0 )10?(00000001)?反+ (11111110)反?=? (11111111)反?=? ( -0 ) ?有问题.( 1 )10?-? ( 2)10?=? ( 1 )10?+ ( -2 )10?= ?( -1 )10(00000001)?反+ (11111101)反?=? (11111110)反?=? ( -1 )?正确问题出现在(+0)和(-0)上,在人们的计算概念中零是没有正负之分的.(印度人首先将零作为标记并放入运算之中,包含有零号的印度数学和十进制计数对人类文明的贡献极大).于是就引入了补码概念. 负数的补码就是对反码加一,而正数不变,正数的原码反码补码是一样的.在补码中用(-128)代替了(-0),所以补码的表示范围为:(-128~0~127)共256个.注意:(-128)没有相对应的原码和反码, (-128) = (10000000) ?补码的加减运算如下:( 1 )?10-? ( 1 )?10=? ( 1 )10?+ ( -1 )10?= ?( 0 )10(00000001)补?+ (11111111)补?=? (00000000)补?= ( 0 )?正确( 1 )?10-? ( 2)?10=? ( 1 )10?+ ( -2 )10?= ?( -1 )10(00000001)?补+ (11111110)?补=? (11111111)补?= ( -1 ) ?正确?? 所以补码的设计目的是:???? ⑴使符号位能与有效值部分一起参加运算,从而简化运算规则.⑵使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计? 所有这些转换都是在计算机的最底层进行的,而在我们使用的汇编、C等其他高级语言中使用的都是原码。
定点数加减法及其溢出判断原理定点数补码加减法及其溢出判断原理补码加减运算补码的数学表⽰设X为⼀个数的真值,M=2n(n为机器位数),则在数学表⽰上[X]补=M+X (modM),−2n−1≤X<2n−1补码加法[X]补+[Y]补=M+X+M+Y(modM)=M+X+Y(modM)=[X+Y]补可见,补码加法直接使⽤加法器相加即可补码减法[X]补−[Y]补=M+X−M−Y=X−Y(modM)=M+X+M−Y(modM)=[X]补+[−Y]补补码减法可以转化为补码加法,这也是计算机可以只设计加法器⽽不⼀定需要减法器的原因如何将[Y]补与[−Y]补进⾏转化是补码减法的重点设[Y]补=Y n Y n−1…Y1(1)当0≤Y<2n−1时[Y]补=[Y]原=0,Y n−1Y n−2…Y1[−Y]原=1,Y n−1Y n−2…Y1Y为正,-Y为负,则[−Y]补=1,¯Y n−1¯Y n−2…¯Y1+1(2)当 −2n−1<Y<0 时[Y]补=1,Y n−1Y n−2…Y1[Y]原=1,¯Y n−1¯Y n−2…¯Y1+1[−Y]原=0,¯Y n−1¯Y n−2…¯Y1+1Y为负,-Y为正,则[−Y]补=[−Y]原=0,¯Y n−1¯Y n−2…¯Y1+1综上所述:机器负数转换⽅法为[−Y]补=∼[Y]补+1溢出判断溢出产⽣的原因由于机器存放数字的⼆级制数码位数有限,当进⾏模M加法时会出现异常的符号改变现象,称为溢出。
溢出分为以下两种:1. 正溢:两个整数相加得到⼀个负数2. 负溢:两个负数相加得到⼀个负数溢出检测假设加法情况如下:操作数A:[X]补=X n X n−1…X1操作数B:[Y]补=Y n Y n−1…Y1两数和:[S]补=S n S n−1…S1⽅法⼀:直接检测当A>0,B>0但S<0时或A<0,B<0但S>0时显然发⽣了溢出,表⽰为:溢出=X n Y n ¯S n+¯X n¯Y n Sn⽅法⼆:进位检测假设两数运算时产⽣的进位分别是C n C n−1…C1那么根据刚才的讨论可以得到1. 当A>0,B>0但S<0时,A n=0,B n=0,S n=1,即n-1位发⽣进位,n位不可能进位,C n−1=1,C n=0;此时正溢2. 当A<0,B<0但S>0时,A n=1,B n=1,S n=0,即n位发⽣进位,n-1位不可能进位,C n=1,C n−1=0;此时负溢3. 当A>0,B>0但S>0时,A n=0,B n=0,S n=0,即均不进位,C n−1=0,C n=0;此时不溢出4. 当A<0,B<0但S<0时,A n=1,B n=1,S n=1,即均进位,C n−1=1,C n=1;此时不溢出综上所述,那么可以得到溢出=C n−1⊕C n⽅法三:双进位检测在运算时临时将两操作数的符号位复制⼀位补在最⾼位+1的位置这样运算就会变成操作数A:[X]补=X n X n X n−1…X1操作数B:[Y]补=Y n Y n Y n−1…Y1两数和:[S]补=S n2S n1S n−1…S1根据S n2S n1的不同结果,我们就可以判断是否发⽣溢出,这个原理与进位检测其实是相同的S n2S n1=00;⽆溢出S n2S n1=01;正溢S n2S n1=10;负溢S n2S n1=11;⽆溢出为了节约存储位数,最后保存结果时会忽略最⾼位的S n2的计算结果,仅在运算时扩充为双符号位Processing math: 100%。
计算机原理第3章运算方法和运算器综合练习一、选择题知识点:定点补码的加法,减法,不带符号数的运算,溢出 P261、[X]补+[Y]补=[X+Y]补(mod 2n)2、[X-Y]补=[X+(-Y)]补= [X]补+[-Y]补(mod 2n)3、[-Y]补=[[Y]补]变补(注:连同符号位一起变反加1的过程叫变补或求补。
)4、判断溢出条件: C S+1和C S相异时溢出当C S+1C S=00或 C S+1C S=11时不产生溢出。
当C S+1C S=01或C S+1C S=10时则产生溢出。
1、计算机中实现减法运算使用的方法是()A.从被减数中减去减数 B.从减数中减去被减数再求反C.转换为补码的加法运算 D.依减数的形式再选择一种适当的方法2、定点数作补码加减运算时,其符号位是( )A.与数位分开进行运算B.与数位一起参与运算C.符号位单独作加减运算D.两数符号位作异或运算3、补码加减法运算是()A .操作数用补码表示,两数的尾数相加减,符号位单独处理,减法用加法代替B .操作数用补码表示,符号位与尾数一起参加运算,结果的符号与加减所得相同C .操作数用补码表示,连同符号位直接相加减,减某数用加负某数的补码代表,结果的符号在运算中形成D .操作数用补码表示,由数符决定两尾数的操作,符号位单独处理4、执行二进制算术运算11001001+00100111,其运算结果是()。
A) 11101111 B) 11110000 C) 00000001 D) 101000105、已知X的补码为11101011,Y的补码为01001010,则X+Y的补码为()。
A、10100001B、11011111C、00110101D、溢出6、已知X的补码为11101011,Y的补码为01001010,则X-Y的补码为()。
A、10100001B、11011111C、10100000D、溢出7、下面关于溢出的描述正确的是()A 溢出就是进位B 溢出是指运算结果的最高位向更高位进位或借位C 溢出与补码运算中的模丢失是一个概念D 溢出主要用于判断带符号的运算结果是否超过数的表示范围8、定点运算器运算时产生溢出的原因是()。