原码、反码、补码基本概念

基本概念

原码:符号位加上真值的绝对值,也就是第一位表示符号。其余位表示值(0为正值,1为负值)

原码是人脑最容易理解和计算的表示方式

反码:正数的反码是其本身,负数的反码是在其原码的基础上符号位不变,其余各位取反

一个反码表示的负数是无法无法直观地看出其数值的通常需要将其转换为原码在进行计算

补码:正数的补码是其本身,负数的补码是在其原码的基础上除了符号位进行取反,并且在最后一位加1

对于负数的补码的表示方式也是人脑无法直观的看出其数值的,通常需要转化成原码的形式进行计算

一个小小的栗子:
【+1】 = 【0000 0001】原 = 【0000 0001】反 =【0000 0001】补
【-1】 = 【1000 0001】原 = 【1111 1110】反 = 【1111 1111】补

使用原码,反码、补码的原因

原码:
原码是最简单的整数表示方法,直接使用二进制表示数值,原码的优点是直观,容易理解。然而,原码的缺点是加法和减法运算复杂,需要额外的规则来处理符号位
使用原码进行计算:
1-1 = 1+(-1)=【0000 0001】原+【1000 0001】原 = 【1000 0002】原 = -2 (计算结果是错误的)

原码表示让符号也参加计算,显然对于减法来说计算结果是错误的,这也就是为何计算机内部不使用原码表示一个数的原因

反码:为了解决上面的原码在加减运算值中的问题,而引入了反码:
反码计算:
1-1 = 1+(-1)=【0000 0001】原 + 【1000 0001】原 =【0000 0001】反+【1111 1110】反 =【1111 1111】反 = 【1000 0000】 = -0

通过上面的计算结果可以发现真值部分是正确的,但是出现唯一的问题,在0这个特殊的值人对+0和-0的认识时一样的所以0带符号是没有作用的,但是0会出现两个不同的原码。

为了解决上面计算所出现的正零和负零的问题补数出现了
补码:为了解决反码的正零和负零问题,补码被引入
补码计算:
1-1 = 1+(-1) = 【0000 0001】原 +【1000 0001】原 = 【0000 0001】反 + 【1111 11110】反 = 【0000 0001】补 + 【1111 1111】补 = 【1 0000 0000】补 =【0000 0000】原 = 0

注意:进位1不在计算机字长中

使用【1000 0000】表示-128 的由来:

(-1)+(-127) = 【0000 0001】原 + 【1111 1111】原 = 【1000 0001】补 +【10000 0001】补 = 【1000 0000】补

通过上面的计算可以验证-128的补码为【1000 0000】补但是-128没有原码和反码,反码和原码的适用范围为【-127,127】补码的使用范围时【-128,127】

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿龙的代码在报错

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值