认识原码反码补码

目录

一.何为原码反码和补码?

(1)原码

(2)反码

(3)补码

(4)总结

二.原反补之间的简单计算

(1)补码加法

(2) 补码减法

(3) 溢出问题


一.何为原码反码和补码?

(1)原码

原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。

  • 符号位:最高位(最左边的位)用于表示符号,0 表示正数,1 表示负数。
  • 数值部分:其余的位用于表示数值的绝对值。

例如,在 8 位二进制中:

  • +5 表示为:0000 0101(最左边的0表示正数)
  • -5 表示为:1000 0101(最右边的1表示负数)

(2)反码

反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。

  • 正数:反码和原码一样。
  • 负数:反码为原码的按位取反。

例如,在 8 位二进制中:

  • +5 的反码:0000 0101(与原码相同)
  • -5 的反码:1111 1010(将原码的数值部分按位取反)

(3)补码

补码:反码+1就得到补码。

  • 正数:补码与原码相同。
  • 负数:负数的补码为反码加 1。

例如,在 8 位二进制中:

  • +5 的补码:0000 0101(与原码相同)
  • -5 的补码:1111 1011(反码 1111 1010 + 1 = 1111 1011

(4)总结

数值原码反码补码
+50000 01010000 01010000 0101
-51000 01011111 10101111 1011
+00000 00000000 00000000 0000
-01000 00001111 11110000 0000

二.原反补之间的简单计算

(1)补码加法

补码的加法与普通的二进制加法相同,不区分正负数。无论是正数加正数、正数加负数,还是负数加负数,计算机只需将它们的补码相加,溢出的位自动丢弃。

例子:

例子 1:正数加法

计算 5 + 3,用 8 位补码表示:

  • 5 的补码是:0000 0101
  • 3 的补码是:0000 0011
  0000 0101
+ 0000 0011
------------
  0000 1000   (结果为 8,正确)

例子 2:正数加负数

计算 5 + (-3),用 8 位补码表示:

  • 5 的补码是:0000 0101
  • -3 的补码是:1111 1101(原码是0000 0011)(3 的反码 1111 1100 加 1)
  0000 0101
+ 1111 1101
------------
  0000 0010   (结果为 2,正确)

溢出的位被自动丢弃,所以结果保持正确。

(2) 补码减法

减法可以通过将减数的补码取反(即变成负数),然后与被减数相加来实现。因此,减法实际上也是通过加法来处理的。

例子 3:正数减法计算 5 - 3,相当于 5 + (-3),用 8 位补码表示:

  • 5 的补码是:0000 0101
  • -3 的补码是:1111 1101
  0000 0101
+ 1111 1101
------------
  0000 0010   (结果为 2,正确)

例子 4:负数减负数

计算 -5 - (-3),相当于 -5 + 3,用 8 位补码表示:

  • -5 的补码是:1111 1011
  • 3 的补码是:0000 0011
  1111 1011
+ 0000 0011
------------
  1111 1110   (结果为 -126,正确)

看上面3个例子结果都是对的,为什么到这里结果就不是-2了呢?

这是因为正数他的原反补都是相同的,我们一般都是用补码来计算两个数的相加或相减,然后再将计算出来的结果转换为原码,最后计算出最终结果,我们前面三个例子计算出来的都是正数,原反补都一样,所以是正确的。

至于这第四个例子,负数得先转换原码,我在这里教大家一个快速计算由补码转换为原码的方法:
 

从最右边开始找,找到第一个1,然后在他的前一位加1就可以得到原码
对于本题:
 1111 1110
+      1
-------------
10000 0010(显然是-2)

补充:由于计算机中采用补码表示法进行加法运算时,可以将有符号整数的加法统一为无符号整数的加法,并且如果最高位(符号位)有进位,则忽略该进位。因此,我们可以直接进行二进制加法运算而不考虑符号位的进位。

(3) 溢出问题

在使用补码进行加减法时,可能会出现 溢出。溢出是指结果超出了可表示的范围。例如,8 位补码可以表示 -128 到 127 的数值,超过这个范围的结果会出现错误。

例子 5:溢出

计算 120 + 10,用 8 位补码表示:

  • 120 的补码是:0111 1000
  • 10 的补码是:0000 1010
  0111 1000
+ 0000 1010
------------
  1000 0010   (结果为 -126,溢出)

解释:因为 8 位补码最大能表示的数是 127,但实际结果 130 超出了范围,导致溢出并得到一个错误的结果(-126)。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值