当我执行下面的代码时,我得到了-7615。 任何人都可以解释我如何。添加short和int值,将其存储在短变量
public static void main(String[] args)
{
short s = 1;
int z=123456;
s+=z;
System.out.println(s);
}
当我执行下面的代码时,我得到了-7615。 任何人都可以解释我如何。添加short和int值,将其存储在短变量
public static void main(String[] args)
{
short s = 1;
int z=123456;
s+=z;
System.out.println(s);
}
从Primitive Data Types和JLS 5.1.3. Narrowing Primitive Conversion
短:短的数据类型为16位有符号二进制补码整数。它的最小值为-32,768,最大值为32,767(含)。与字节一样,也适用相同的指导原则:在实际节省内存的情况下,可以使用short来节省大型数组中的内存。
int z=123456;
s+=z;
其相同
s = (short)(123456 + 1) ;
带符号的整数的收缩转换为整数类型T简单地丢弃所有,但n个最低阶位,其中n为位的数目用于表示类型T.除了可能丢失有关数值大小的信息之外,这可能会导致结果值的符号与输入值的符号不同。
所以123457 = 11110001001000001 短片可以通过16位= 1110001001000001这是负的,因为它的启动与1
所以存储-ve数将其转换成两个互补
1110001001000001 = 2的补码表示-7615.
short
不能表示值123457,因此你会得到溢出。
123457二进制将是11110001001000001
即17位,并且因为short只能存储16位,所以该值将被截断为1110001001000001
。第一位代表符号,即因为它是1
你有一个负数,并且因为负数存储在2的补码1110001001000001
表示-7615的值(正7615将是二进制001110110111111
这是负数7615的二进制补码110001001000001
) 。
什么是可以存储在一个简短的值的范围?如果不是-7615,你认为价值是多少? –