例如,Java数据类型字节在存储的单个字节中保存-128到127的数据。 要启用从0到127之间的-1到-128之间的distingush将需要额外的数据,这将使数据类型obver其分配的存储。不可否认,它只需要1个额外的位,但它仍然会结束。
java如何做到这一点?
答案 0 :(得分:9)
基本类型在所有机器和所有实现中定义为相同,并且是各种大小的二进制补码整数,单精度和双精度IEEE 754标准浮点数,布尔类型和Unicode字符char类型。 - The Java Language Specification: Introduction
你可以把它想象成一个从0到255的整数,其中128 总是被减去。
更多技术性:通过反转其位并添加一个,可以(并且将)取消整数(正面→负面)。这几乎就像One's complement一样(它只是反转所有位 - 因此补码。但是一个补码的问题是它有两个不同的零:+ 0和-0(浮点数有那也是,但由于其他原因和更有用☺)。两个补码通过添加一个来解决这个问题,从而扩展了负值的范围(这就是为什么它 -128 ...... 127)。
以某种方式你可以说这个标志确实“存储”在数字的第一位。所以你观察它需要一点存储是正确的。但是byte
的数字范围(正或负,忽略符号)只需要7位,所以你再次有一个字节。