与原始数据类型范围有关的问题

时间:2018-11-17 19:50:16

标签: java primitive

在Java中,short的范围是-128到127。为什么不是-127到127?考虑到一位用于存储数字的符号,负极限应该为-127,即2 ^ 6 + 2 ^ 5 + 2 ^ 4 + 2 ^ 3 + 2 ^ 2 + 2 ^ 1 + 2的总和^ 0?我在计算中缺少什么?

3 个答案:

答案 0 :(得分:1)

我将假设您的意思是byte而不是short,因为short的范围是-32768到32767。

似乎给人的印象是,对于整数类型(包括short),负号用带符号的位表示,而其余数字则正常显示。因此-1将表示为1000.0001(为便于阅读而添加了点)。但是,这是不正确的。

实际上,-1表示为1111.1111,而1000.0000实际上是-128(而不是-0,这种类型不存在)。这是为了使算术在所有值上保持一致。

答案 1 :(得分:1)

您正在使用8位将其存储在计算机的内存中。可以是0到255。考虑到您还需要负数,您必须更改查看这些数字的方式。

假设我们将第8位作为否定性的指标。负数将是正数的负数。这样我们可以显示从-127到127的数字,但是有两种显示0的方法:1111 1111和00000000。这被称为One's Complement。

由于工程师想利用所有可用空间,因此提出了一个新想法。为了将位置编号转换为负数(*-1),他们决定完全取反该编号并将其递增1。这将使他们有可能使用整个256范围。那就是两个人的补语。有128个负数+ 1个零+ 127个正数,即256个数字。

答案 2 :(得分:0)

您的计算是错误的。总数为2 ^ 8,等于256。从-128到127,因为我们将0视为这些数字之一。 128 + 128 =256。但是256 +'0'=257。因此必须从-128到127。