java -128_为什么Java中的字节范围是-128到127?

答案是二进制补码。

简而言之,Java(和大多数现代语言)不使用有符号大小表示来表示有符号整数。换句话说,8位整数不是符号位,后跟7位无符号整数。

取而代之的是,在称为二进制补码的系统中表示负整数,这使硬件更容易进行算术处理,并且还消除了具有正零和负零的潜在歧义。消除负零的副作用是,在范围的底部始终有一个额外的负数可用。

二进制补码系统的另一个有趣特性是,第一位有效地用作符号指示符(即,从位1开头的所有数字均为负),但接下来的七个位不能自己解释为无符号数。使用符号位。

二进制补码并不是很复杂,但是初步了解二进制补码是什么,以及它如何工作以及为什么起作用可能超出了SO答案的范围。从Wikipedia文章开始,或在google中搜索更多资源。

为了尝试简短地解决有关-128的查询,生成二进制补码背后的基本思想是采用数字的无符号形式,将所有位取反并加1。因此,无符号128是10000000。取反的是01111111,再加上一个将获得10000000。因此,在二进制补码系统中,10000000明确是-128而不是+128。大于或等于+128的数字根本无法使用二进制补码系统以8位表示,因为它们会与负数形式产生歧义。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值