gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 13:53:32 26 4
gpt4 key购买 nike

我不明白为什么一个字节可以取的最低值是 -128。我可以看到最高值是127,因为它是二进制的01111111,但是一个只有8位怎么表示-128,一个哪个用于标志?正 128 已经是 8 位,即 10000000,然后您需要第 9 位来表示负号。

有人可以帮我解释一下吗。

最佳答案

答案是two's complement .

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

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

二进制补码系统的另一个有趣特性是第一位确实有效充当符号指示符(即所有以位 1 开头的数字都是负数),但接下来的七位不是被单独解释为应用符号位的无符号数。

二进制补码并不是非常复杂,但初步了解二进制补码是什么以及它的工作方式和原因可能超出了 SO 答案的范围。从 Wikipedia 文章开始,或在 google 上搜索更多资源。

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

关于java - 为什么Java中的字节范围是-128到127?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3621067/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com