快速计算补码表示的值

前提

  • 掌握二进制与十进制的转换。
  • 掌握原码、反码、补码。
  • Java 的整数型 byte 的取值范围。

目的

无需将补码转成原码,再计算原码表示的值:

  • 快速计算补码表示的值。
  • 两个同类型的值相加后,若溢出,值为?

公理 1

w 位二进制数,此二进制数能够表示的最大值:2w - 1。如 0b11111111 = 28 - 1 = 255。

推导 1

以 8 位为例,设 0b111110 = x。

-x 的原码:1 1111110
-x 的反码:1 0000001
-x 的补码:1 0000010

反码是除了符号位,对原码求反,0b1111111 - 0b1111110 = 0b0000001。不考虑符号位,得到的二进制数值为:(27 - 1) - x = 127 - x。

补码是反码+1,值为:128 - x。如果再加上符号位 1,当成原码看待,值为:-(128 - x) = -128 + x。

-x 的补码是 -128 + x 的原码。

结论 1

设 x < 0,则 x 的补码是 -2w-1 - x 的原码。

例 1:w = 8,计算补码 1 0000011 对应的值。

看符号位为 1,是负数的补码。

  • 设此值为 x,x 的补码 1 0000011 是 -128 - x 的原码 1 0000011

  • -3 的原码 1 0000011

  • 推出:-128 - x = -3。

  • 得到:x = -128 + 3 = -125。

    -3 移到左边变为正数,x = -128 + 0b00000011 = -125。

验证:

补码:1 0000011
反码:1 0000010
原码:1 1111101

0b1111101 = 125,再加上符号位,值为 -125

例 2:w = 8,计算补码 1 1010001 对应的值。

值 = -128 + 0b01010001 = -128 + 81 = -47。

推导 2

补码 1 1010001 = -128 + 0b1010001。

二进制数 1 1010001 = 0b10000000 + 0b1010001 = 128 + 0b1010001。

二进制数 = 补码 + 256。

结论 2

x < 0,则 x 的补码被当成二进制数后,值为 x + 2w

例 3:w = 8,值为 -32 的补码被当作二进制数时,值为?

值 = -32 +

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值