例如,Java 数据类型字节将 -128 到 127 的数据保存在存储中的单个字节中。为了能够区分 - 1 到 -128 和 0 到 127 将需要额外的数据,这些数据将使数据类型超出其分配的存储空间。诚然,它只需要额外的一点,但它仍然会过去。
java是如何做到这一点的?
例如,Java 数据类型字节将 -128 到 127 的数据保存在存储中的单个字节中。为了能够区分 - 1 到 -128 和 0 到 127 将需要额外的数据,这些数据将使数据类型超出其分配的存储空间。诚然,它只需要额外的一点,但它仍然会过去。
java是如何做到这一点的?
基本类型在所有机器和所有实现中都被定义为相同,并且是各种大小的二进制补码整数、单精度和双精度 IEEE 754 标准浮点数、布尔类型和 Unicode 字符类型。—<em> Java 语言规范:简介
你可以把它想象成一个从 0 到 255 的整数,总是减去 128。
更具技术性:整数可以(并且将会)通过反转其位并加一来否定(正→负或反之亦然)。这几乎就像一个补码(它只是将所有位反转 - 因此是补码。但是一个补码的问题是它有两个不同的零:+0 和 -0(浮点数也有,但出于其他原因并且更有用) ☺). 二进制补码通过加一解决了这个问题,从而扩展了负值的范围(这就是为什么它是-128 ..127)。
在某种程度上,您可以说该符号确实“存储”在数字的第一位。所以你观察到它需要一点存储是正确的。但是a的数值范围byte
(正数或负数,忽略符号)只需要7位,所以你又多了一个字节。