| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 24496 人关注过本帖
标题:两个负数的二进制补码是怎么相加的?
取消只看楼主 加入收藏
小赵q1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:492
专家分:777
注 册:2011-8-26
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:1 
两个负数的二进制补码是怎么相加的?
今天看了两个二进制补码相加运算:有一个地方一直补懂,
        补码的加法规则是:[X + Y]补 = [X]补 + [Y]补
        补码的减法规则是:[X - Y]补 = [X]补 + [-Y]补
例如:用8位二进制补码计算:25+(-32)     这是一个正数和一个负数的相加,因为正数的最高位是0,负数的最高位是1,0加1后就是1所以下面的式子还算容易理解。
       25                   0 0 0 1 1 0 0 1
               + + + + + + + +
+( - 32 )                1 1 1 0 0 0 0 0
                            ‖‖‖‖‖‖‖‖
    -  7                     1 1 1 1 1 0 0 1

但是两个负数相加该怎么算呢?他们的最高位都是1,相加后等于0,如果最高位成0了,那就表示它不是一个负数了,如果还要进一位,那么规定的是8位进一位就成了9位了。例如下面的
     (-25)                 1 1 1 0 0 1 1 1
+    (-20)                1 1 1 0 1 1 1 1
       -45                1 1 0 0 1 0 1 1 0
45的二进制码:  00101101     -45的二进制码:  1 1 0 1 0 0 1 1
是怎么算出来的呢?难道是先算出来了再算结果的补码吗?那样就不一定会超出要求的8位了。

搜索更多相关主题的帖子: 二进制 
2012-06-25 23:39
小赵q1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:492
专家分:777
注 册:2011-8-26
收藏
得分:0 
回复 2楼 beyondyf
今天静下心来重新算了一遍终于明白了,步骤如下:
20的二进制补码 = 00010100        25的二进制补码 = 00011001
按位取反后:     11101011        按位取反后:     11100110
末尾加 1 后:    11101100        末尾加 1 后:    11100111
-20的二进制补码 = 11101100       -25的二进制补码 = 11100111
              -20             11101100
           +(-25)    =    + 11100111
              -45            111010011
超出的最高位去掉后 = 11010011
-45 的补码刚好是 11010011,所以以上式子正确。
谢谢b版的提醒,结贴喽
2012-06-26 19:50
快速回复:两个负数的二进制补码是怎么相加的?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027053 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved