计算机原码反码补码的理解和作用

 

摘要:本文旨在深入探讨整数在计算机中的二进制表示形式以及涉及的源码、反码和补码的运算原理。我们将介绍二进制数的基本概念,解释源码、反码和补码的定义和转换规则,并探讨在运算过程中它们的作用和区别。通过详细的解释和示例,我们希望读者能够全面理解这些概念,并正确应用于实际的计算和编程中。

计算机中数字用二进制表示,即为0,1组成。8比特就是由八个0,1组成的数字。

先说概念,源码就是数字转为二进制表示

例如1(默认8位),用二进制表示为0000 0001,通常有符号数第一位是符号位用来表示正负数。0表示正数,1表示负数。此时-1表示为1000 0001

反码:正数的反码是其本身,1的源码为0000 0001反码为0000 0001。对于负数反码是除了第一位(符号位)外都按位取反,即0变1,1变0。-1的反码为1111 1110

补码:补码就是在反码基础上加一。正数的补码是其本身。负数的补码是在反码的基础上加1。

-1的补码1111 1111

关于为什么引入源码反码补码的概念:

引入源码、反码和补码的概念是为了简化计算机中的整数运算。通过使用补码,可以将减法运算转化为加法运算,从而简化了运算的逻辑。此外,补码还可以解决源码和反码中的数值溢出问题,使运算更加可靠和一致。

【原】0000 0001 +【原】1000 0001 = 【原】1000 0010 = -2;不符合

【反】0000 0001 +【反】1111 1110 = 【反】1111 1111=【原】1000 0000 = -0;不符合

【补】0000 0001 +【补】1111 1111 = 【补】10000 0000 =【补】0000 0000 =0;符合

这样就使用加法解决了减法的问题。

补充

例如

让i = 2,147,483,647 b =1,073,741,823,java中(i+b)/2为负数而(i+b)>>>1为正数

在Java中,>>>>>都是右移位运算符,用于对整数类型的数据进行位移操作。它们的主要区别在于对符号位的处理方式。

  1. >>:有符号右移

    • 对于正数,>>/ 2 运算效果一样,结果向下取整。
    • 对于负数,>> 运算会将符号位一起右移,保持负数的负号不变,结果也是向下取整。
  2. >>>:无符号右移

    • 对于正数,>>>/ 2 运算效果一样,结果向下取整。
    • 对于负数,>>> 运算会将符号位也向右移动,但是不保留符号位,结果是一个正数。
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值