补码比较大小

来源:百度知道 编辑:UC知道 时间:2024/05/28 04:38:07
比如
X=01101010B
Y=10100010B
书上直接比较大小
我想的是先判断最高位确定正负,跳转到相应子程序,再分别屏蔽最高位比较大小。。。。。。
为什么可以直接比较大小。。。。。。。
补码比较大小当然是有符号数的比较。。。。。。。

先判断最高位确定正负,跳转到相应子程序,再分别屏蔽最高位比较大小.
您这个算法应该也是可行。但是对于微机来说,两个带符号数比较大小并根据比较的结果转移,它是带有测试条件的。
基本上是JL(小于)的测试条件是SF和OF异号,只有SF和OF异号,CPU就知道被减数小于减数。如果SF和OF同号,CPU就知道被减数大于减数。如果相等,就看CF=1否。
说那么多就是JL 要发生转移,CPU只要将SF和OF两标志位进行异或操作,发现异或的结果为1,就知道小于,异或的结果为0就知道是大于。这样编程序就变得容易多了。

注:OF=1的判断方法很简单,只要看两数相减的结果是否符合逻辑或逻辑不正常,如果符合正常逻辑OF=0,不符合逻辑OF=1.比如正数减负数等于负数,那么不符合逻辑OF=1.比如正数减正数结果正负都可能所以OF一定为0

比如一个正数减去负数(当然正数一定大于负数),如果结果为正数,那么OF=0,没溢出,SF=0。OF和SF同号,说明大于
正数减去负数结果也可能出现负数,那么OF=1有溢出,SF=1,OF和SF同号,说明还是大于

正数减去正数(OF一定为0),结果为负数,那么SF=1,与OF异号,说明小于。如果结果为正,SF=0,与OF同号,说明大于。

当然负数减负数的情况是一样的

负数减正数,如果结果为负数,那么OF=0,SF=1,异号说明小于。(当然负数一定小于正数)
如果结果为正数,那么OF=1,SF=0,还是大于。
可见计算机是能利用标识位自动判定两数大小,不需要额外的算法。当然您的想法是比较有创意的,不过指令设计者应该更巧妙。

注意你问题的前提是X,Y存放的都是补码!!!
正数在计算机中是以原码存放的,而负数以补码存放。
既然现在,补码比较大小,那就是针对负数来说的啦,就是说X,Y都是负数了,不用判断正负了!!
注意到补码的求取规则,很容易知道补码越大的,对应的负数越大。
对现在问题中的X,Y,Y>X,故Y对应的负数>X对应的负数。

????不是说补码正数前(符号位)加0 负数前加1的吗`怎么