为什么补码等于反码加一

因为原码加反码肯定等于

1111 1111 1111 1111

比如

0000 0000 0001  加自己的反码

1111 1111 1110

在十进制中一个数加自己的负数等于0

那在二进制中也该等于0

1111 1111 1111 1111 显然不等于0

要是再加个一就好了

  1111 1111 1111 1111

+0000 0000 0000 0001 

--------------------------------

1 0000 0000 0000 0000 

八位计算中溢出位的1会被忽略掉

这样的话结果刚好等于0

所以反码要加个1补码才能让正负数二进制计算正确

当然以上仅为个人通俗理解,这样设计实际上与CPU底层设计有关

感兴趣的小伙伴可以了解一下“全加器”,学习一下数字电路

或者玩一下这个游戏:“图灵完备”,steam有售

以下是用AI搜出来的回答:

补码的定义和加一的原因

补码(Two's complement)是一种在计算机系统中用来表示有符号整数的方式。它的主要特点是能够简化二进制加法和减法的实现,特别是在涉及到负数时。

在补码系统中,正数的补码与其普通的二进制表示相同,而负数的补码则是其绝对值的二进制表示取反(即将每个位上的0变为1,1变为0)后加1。这样做的原因包括:

  1. 消除+0和-0的区别:在原码或反码表示中,+0和-0有不同的表示,这可能导致混淆。补码通过将+0和-0统一为同一个二进制形式(即全0),消除了这种歧义。
  1. 简化硬件设计:在补码系统中,加法器可以不用考虑符号位的特殊处理,因为加法运算可以统一处理。这简化了硬件设计,因为相同的电路可以用于加法和减法操作。
  1. 方便表示负数:在补码系统中,负数的表示非常直观,只需要将对应正数的二进制表示取反然后加1即可。
  1. 避免溢出问题:在补码系统中,加法运算不会出现+0和-0的问题,也不会出现其他类型的溢出,因为补码表示的范围是对称的。
  1. 方便计算:在补码系统中,如果两个数相加结果超过了表示范围的上限,最低位的进位会被丢弃,这相当于自动进行了模运算,从而避免了溢出。

例如,假设我们有一个8位的补码系统,+1的补码表示为 0000 0001,而-1的补码表示为 1111 1111。如果我们将这两个数相加,得到的结果是 1 0000 0000,由于最高位的进位被丢弃,最终结果为 0000 0000,即+0,这符合我们的预期。如果没有加1,那么-1的补码加上+1的原码 0000 0001 将得到 1111 1110,这不是我们期望的结果.

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值