-128的原码

-128的原码结论

背景:

  • java中byte占两个字节八位。
  • 无符号范围为0 ~ 255,即二进制范围0000 0000 ~ 1111 1111。
  • 有符号范围为-128 ~ 127,即二进制范围 1111 1111 ~ 0111 1111。

问题点:有符号情况下,1111 1111 ~ 0111 1111 表示 -127 ~ 127,原码只能表示出255位,-128没有表示出来。

解析:

  • 已知 -128 的补码是1000 0000,求 -128 的原码
  • 除符号位,对补码各位取反,得到1111 1111。
  • 除符号位,对补码各位加一。
  • 是有溢出的。
  • 因为0的原码是0000 0000,那么1000 0000可以理解成 -0
  • 将 -0 原码规定为 -128 (这里是我的理解,如有更好的理解欢迎评论。我们只要记住8位有符号补码1000 0000 是 -128即可)

结论:-128在八位有符号表示时,是没有原码的。

相关题目解析

short a = 128;
byte b  = (byte)a;
System.out.println("result:"+b);
result:-128
  • short 占2个字节,16位,128用补码表示:0000 0000 1000 0000
  • 强转byte(byte 占1个字节,8位),程序截取后8位:1000 0000
  • 补码1000 0000 对应的 是 -128

原码、反码、补码基础知识

参考文章(https://www.cnblogs.com/sakurayj/p/10253911.html)

  1. 正数的原码,反码,补码都是相同的
  2. 负数原码和反码互相转换
负数原码转反码:符号位不变,数值位按位取反
原码 1011 0101
反码 1100 1010

负数反码转原码:符号位不变,数值位按位取反
反码 1100 1010
原码 1011 0101
  1. 负数原码和补码互相转换
负数原码转补码:符号位不变,数值位按位取反,末尾加一
原码 1011 0101
补码 1100 1011

负数补码转原码:符号位不变,数值位按位取反,末尾加一
补码 1100 1011
原码 1011 0101
  1. 负数反码和补码互相转换
负数反码转补码:符号位不变,末尾加一
反码 1100 1010
补码 1100 1011

负数补码转反码:符号位不变,末尾减一
补码 1100 1011
反码 1100 1010
  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值