添加short和int值,将其存储在短变量

时间:2015-10-05 07:15:22

标签: java

当我执行下面的代码时,我得到了-7615。 任何人都可以解释我是怎么做的。

public static void main(String[] args)
{
    short s = 1;
    int z=123456;
    s+=z;
    System.out.println(s);
}

2 个答案:

答案 0 :(得分:2)

short无法代表值123457,因此您将获得溢出。

二进制的123457将是11110001001000001,即17位,因为short只能存储16位,所以该值将被截断为1110001001000001。第一位代表符号,即因为它是1你有一个负数,并且由于负数存储在2的补码中1110001001000001代表-7615的值(正7615将是二进制001110110111111,它是负{76}的110001001000001的两个补码。

答案 1 :(得分:2)

来自Primitive Data TypesJLS 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 Short可以表示为16位= 1110001001000001,这是负数,因为它以1

开头

所以要存储-ve number将其转换为两个补码

1110001001000001 = 2'补充-7615.