关于二进制负数补码补码加减运算,实在是不太明白,请大神指教!

【图文】2补码加减法运算_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
2补码加减法运算
上传于||暂无简介
大小:1.51MB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢简述用补码表示的二进制整数进行加减运算的优越性。_百度知道
简述用补码表示的二进制整数进行加减运算的优越性。
简述用补码表示的二进制整数进行加减运算的优越性。
[Y]补=101101,则结果的符号位和数值位同时为正确值,是简单地把这个数的补码逐位取反再在最低位加1即可得到,符号位与数值位同等对待。例如,还可以看到,只需用二数的补码直接执行加减运算即可,用的仍是加法器线路,实现减运算时,因此在计算机中经常用的补码实现加减运算,求这个数的负数的补码。有了补码表示的被加(减)数和加(减)数,要比较两个数的绝对值的大小用原码实现加减运算很不方便,把减数的负数的补码送加法器即可。在有了一个数的补码之后,若运算结果不溢出。此外,还要确定运算结果的正确的符号等,要完成计算补码表示的二数之和或二数之差,即不超出计算机所能表示的范围,一起参加运算,则[-Y]补=010011,这大大简化了加减运算所用的线路和加减运算的实现算法。 要比较参与加减运算两个数的符号
其他类似问题
为您推荐:
补码的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁最近都一直在看几本关于计算机组成原理方面的大作:,,,算是补充了自己作为一个非计算机专业的程序员在这方面的缺失。特别是看了中关于加法器与减法器实现的章节后,对于二进制补码有了一个感性的认识。
在计算机的历史中,曾经出现过三种表示负数的二进制方法。第一种是直接用一个符号位。第二种是用反码,即对一个整数的全部位取反则得到这个数的负数。而最后的一种方式就是二进制补码(Two&s Complement)。
但是为什么现在的计算机都要采用二进制补码这种方式呢?在所有知识的背后,要做到知其然的同时,更要做到知其所以然,这样才能做到真正的理解。其实采用二进制补码的原因很简单,简单,高效。
要真正理解这背后的原因,首先我们需要理解,计算机是如何做加法的。
我们知道,当一个与门和一个异或门组合在一起的时候,就可以形成一个接受两个1bit的输入,并且输出其相加的和的结果和进位的半加器。
而当两个这样的半加器再与一个或门组合在一起时,就可以形成一个接受两个1bit输入,1bit进位输入,输出加和输出和进位输出的全加器。
而当N个这样的全加器组合在一齐时,就可以形成一个能计算两个N为二进制数相加的加法器。
理解了上面的实现方式之后,我们就可以做出一台上古时代用于计算二进制加法的加法器:
当我们实现了加法器之后,理所当然的,我们希望同样能实现减法。但我们知道减法与加法相比,是不一样的机制的。加法只有向前进位,而减法呢?减法则有可能会向前借位,同时,前一位又可能再向前借位,这是一种十分麻烦的机制。那么有什么办法可以解决这个这么麻烦的问题呢?上古时代的天才们就开始想,能不能把减法转换为加法,那么就可以借用简单的加法器来进行减法运算呢?于是一种基于补码的使减法变成加法,通过加法器来运算的方法就诞生了。
首先,可以看一个在里面举的例子:
253 & 176 = ???
可以看到,这个减法运算在个位的时候,就需要向前借位了,十分麻烦。
但是我们可以转变一下思路,首先这是一个三位数,三位数的最大值是999。因此我们先用999减去减数176
999 & 176 = 823
然后,用被减数253加上上面求出来的这个值823
253 + 823 = 1076
然后把这个值加1再减去1000,这样就得到了77。噢,这个不正是我们需要的结果77吗?
大家可以看到,在这个过程中,我们虽然用到了减法,但是我们没有用到借位,并且,若我们把这种方法类比到二进制上,我们就会发现,上面的几个做减法的步骤,完全可以通过简单的门电路来实现,而不需要真正地进行运算。好,我们就用同样上面的数字来进行一下二进制的运算。
253 & 176 转换为二进制则是: &
= ???? ????
第一步,用8位二进制数中的最大值,即,减去减数
然后,用被减数与上面的结果相加:
把上述结果加一再减去9位二进制数的最小值1
得到上述结果 = (10)77
我们通过相同的方法在二进制上的使用,求出了同样的结果77。细心的同学已经可以观察到,这里需要用到的减法步骤,其实并不需要真正的减法。例如,第一步,用 & 得到的结果,其实就是对的取反,而取反,我们其实只需要通过取反器就可以实现了。然后,在最后一步,我们减去1 其实我们要做的就是把溢出的那个1去掉就得到我们的结果。
看完了上面的演示,解释一下这个实现的方式:
首先用十进制来解释一下,我们用999 & 176 + 253 + 1 - 1000这个式子来得到结果。若我们把这个式子根据运算规律简单地做一些变换:253 + (999 & 176) + 1 & 1000,可以看到,我们其实就是在加上1000后再减去1000。在此我们把用999减去一个数再加一的这种做法称为求9的补数。
而对二进制做同样的转换后,即对一个数先全部为取反,然后再加一,就得到了一个数的二进制补数。说到这里,我们大概也就明白了为什么我们在计算机中使用补数来表示一个负数的原因了。因为我们知道,减一个正数,其实就是加一个负数。那么我们就可以想一种方法,让这个负数的表示既容易表示,用符合运算的规律。显然,只用符号位不行,仅仅取反也不行。而补数则可以。
我想这大概就是计算机中使用补数来表示负数的原因吧。因为即使是现代的计算机处理器中,其加法器的基本实现的方式都是不变的,只是变得更加高效而已,而为了使用这种加法器的简单性,我们就使用补码这种方式来复用加法器来计算减法运算。
阅读(...) 评论()【图文】补码的加减法运算_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
补码的加减法运算
上传于||暂无简介
大小:146.50KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢计算机科学(12)
补码能够统一加减运算,对于十进制也是如此。
对于二进制补码而言:
(X+Y)补=X补+Y补(X-Y)补=X补+(-Y)补
因为二进制中,0 表示什么都没有,1表示再放一个就会溢出,所以十进制中,用0 取代二进制中的 0,放在符号位上表示正,用 9 取代二进制中的 1,放在符号位上表示负(其实自己把问题弄复杂了,大可不必如此)。
例如,计算-46-37这个式子:-46的原码就是946,补码按位取反(99 - 46 = 53)末位加 1 (其实就是 100 - ),得到 954,-37的原码为 937,补码为 963,补码相加得 (-46)补+(-37)补=954+963=1917,符号位进位舍掉,得到结果是917,917的再按位取反末位加1得原码983,它表示的真值是-83,所以有-46-37=-83。
又比如三位数的减法,573-489 = ?
-489 的补码为:9() = 9511
所以(573)补+(-489)补=573+,符号位进位舍去,得到 84,正数的补码还是本身。
这样也可以做,只是稍显啰嗦,且形式上很不统一。
模仿二进制补码的形式定义十进制的补码如下:对于定点整数n+1位的十进制定点整数X=XnXn-1…X0,其补码为:
[X]补=X, 如果0 &= X &= 5 * 10n-1,
[X]补=10n+1 + X = 10n+1 - | X |,如果 -5 * 10n &= X &= -1
当最高位Xn为:
0,1,2,3,4时,表示正,
5,6,7,8,9时,表示负。
例如三位十进制数补码能表示-500到499这1000个数。例如下列计算:
-327+164 :
(-327)补 + (164)补=673 +164 = 837
-327+164= -(1000 - 837)=-163
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:185571次
积分:23940
积分:23940
排名:第187名
原创:2296篇
转载:26篇
评论:34条
文章:10篇
阅读:1195
文章:15篇
阅读:6530
文章:10篇
阅读:1979
文章:10篇
阅读:1086
(71)(455)(358)(314)(271)(329)(143)(143)(109)(102)(26)(3)

我要回帖

更多关于 二进制的补码 的文章

 

随机推荐