为何使用补码以及原码和反码存在的问题

本文详细介绍了二进制表示中正数和负数的原码、反码、补码概念。原码直接表示符号,但正负数加法存在错误;反码解决了正数加正数、正数加负数的问题,但负数加负数仍存在问题;补码通过在反码基础上加1解决了所有加法问题,确保了运算的正确性。8位二进制数在有符号整数表示下范围为-128到127。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

原码存在的问题

  1. ✅正数加正数OK
  2. ✅负数加负数只是符号出错而已,数值的绝对值是对的
  3. 原码最大的问题就在于一个数加上他的相反数不等于零!反码的设计思想可能就是为了解决这一点
0001 + 0010=00111+2=3)        正数之间的加法 OK
0000 + 1000=1000+0+-0=-0) 问题不大
0001 + 1001=10101+-1=-2)  正数与负数相加 NG
1010 + 1001=0011-2+-1=3)  负数与负数相加 NG

在这里插入图片描述

反码存在的问题

  1. ✅正数加正数OK
  2. ✅正数与负数相加为0
  3. 反码最大的问题就在于 负数加负数计算错误
# 正数 + 正数
0001+0010=00111+2=3)          正数之间的加法 OK

# 正数 + 负数
0001+1110=11111+-1= -0)   OK
	 反   反
0101+1010=11115+-5= -0)   OK
	 反   反
0010+1001=10112+-6= -4)   OK
	 反   反

# 负数 + 负数	 
1110+1101=1011-1+-2=-4) NG
反   反    反
1110+1101=1011-1+-2=-3) OK  但是从原码维度来看,他其实是-3。巧合吗?
反   反    原
											
1110+1100=1010-1+-3=-5) NG
反   反    反
1110+1100=1010-1+-3=-2) NG 验证了上面确实是巧合
反   反    原

在这里插入图片描述

引入补码

  1. ✅正数加正数OK
  2. ✅正数与负数相加为0
  3. ✅负数与负数相加OK
# 正数 + 正数
0001+0010=00111+2=3)        OK

# 正数 + 负数
0001+1111=00001+-1= 0)   OK
	 补
0101+1011=00005+-5= 0)   OK
	 补   
0010+1010=11002+-6= -4)  OK
	 补   补

# 负数 + 负数	 
1111+1110=1101-1+-2=-3)  OK
补   补    补
											
1111+1101=1100-1+-3=-4) OK
补   补    补

在这里插入图片描述

参考

原码,反码,补码杂谈
https://blog.csdn.net/qq_43479628/article/details
https://qb.zuoyebang.com.html
https://blog.csdn.net/Matthew575/article/details/86618990
八位二进制数能表示数的范围以及原码、反码和补码含义

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值