爪哇 - 从int显式转换为短

问题描述 投票:8回答:3

是否有人可以解释为什么这下面的语句:

short value = (short) 100000000;
System.out.println(value);

给我:

-7936

知道了在Java中的短的最大值为32767是否正确?

java variables casting int short
3个回答
22
投票

随着你的100万元价值,我得到-7936。我只能得到16960如果我兑换100万至100万美元。

其原因是,short值被限定在-32768至32767,和铸造到short(一个narrowing primitive conversion, JLS 5.1.3)时的Java仅保持至少显著16位。有效此操作:100万个模2 ^ 16(在一个short 16位)是16960。


2
投票

你做了它的方式重新诠释只是在相同的存储器位置的小位数。它并没有改变他们。

你可能想使用maxmin功能时价值在于超越short的,这时分配短的最大或最小值检测。

int n = 1000000;
short value = n > Short.MAX_VALUE ? Short.MAX_VALUE : n < Short.MIN_VALUE ? Short.MIN_VALUE : (short)n;

更新:更紧凑:

import static java.lang.Math.max;
import static java.lang.Math.min;

// ...

value = (short)min(max(value, Short.MIN_VALUE), Short.MAX_VALUE);
System.out.println(value);

0
投票

Here's好文章解释狭窄和Java中宽元转换。

short s = 696; // 0000 0010 1011 1000
byte x = (byte)s;
System.out.println("byte x = " + x);

生产:

byte x = -72

现在你应该明白为什么 - 因为当我们缩小短到该字节的JVM丢弃最显著的部分(00000010),结果(以二进制形式)为10111000.这是我们在看之前相同的号码。而且,正如你所看到的,它是负的,不像原来的值。

© www.soinside.com 2019 - 2024. All rights reserved.