为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

一只甜甜圈 2019-11-27 13:17:23
我不明白为什么一个字节可以取的最小值是-128。我可以看到最大值是127,因为它是01111111二进制的,但是一个怎么-128用8位表示,其中之一用于符号呢?正数128已经是8位,即10000000,那么您将需要第9位来表示负号。有人可以帮我解释一下。
查看完整描述

3 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

答案是二进制补码。


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


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


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


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


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


查看完整回答
反对 回复 2019-11-27
?
HUX布斯

TA贡献1876条经验 获得超6个赞

基本数字类型可以表示2 ^ n个数字。看n = 2的情况。您可以代表四种情况,我们称它们为a,b,c,d。然后,您可以同意a=-2, b=-1, c=0, d=1(这是公认的方式)或 a=-1, b=0, c=1, d=2(可能,但未使用)。因此,如果您只有一个0并保持2 ^ n的状态,表示您abs(min) != max增加n边界移动量,但abs(min) != max仍然保持。


查看完整回答
反对 回复 2019-11-27
  • 3 回答
  • 0 关注
  • 1066 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信