Java—从Int到Short的显式转换

Java—从Int到Short的显式转换,java,variables,casting,int,short,Java,Variables,Casting,Int,Short,有人能解释一下为什么会有这样的说法吗 short value = (short) 100000000; System.out.println(value); 给我: -7936 知道Java中short的最大值是32767对吗?如果你的值是1亿,我得到-7936。如果我把1亿换成100万,我只能得到16960 原因是short值被限制在-32768到+32767之间,Java在转换为short(a)时只保留最低有效16位。有效地执行此操作:100万模2^16(短代码中为16位)为16960。

有人能解释一下为什么会有这样的说法吗

short value = (short) 100000000;
System.out.println(value);
给我:

-7936

知道Java中short的最大值是32767对吗?

如果你的值是1亿,我得到-7936。如果我把1亿换成100万,我只能得到16960


原因是
short
值被限制在-32768到+32767之间,Java在转换为
short
(a)时只保留最低有效16位。有效地执行此操作:100万模2^16(短代码中为16位)为16960。

您执行此操作的方式仅在同一内存位置重新解释较小数量的位。这并没有改变他们

您可能希望使用
max
min
功能来检测值是否超出
short
的范围,并在超出范围时指定short的最大值或最小值

int n = 1000000;
short value = n > Short.MAX_VALUE ? Short.MAX_VALUE : n < Short.MIN_VALUE ? Short.MIN_VALUE : (short)n;
这篇好文章解释了Java中缩小和扩大原语转换

产生:

byte x = -72
现在你应该明白为什么了——因为当我们缩小到 JVM丢弃最重要部分(00000010)的字节和 结果(二进制形式)为10111000。这是我们以前的号码 看看以前。正如你所看到的,它是负的,不像 原值


我运行相同的代码时得到-7936对不起,应该是1000000@AppXene“它只是从同一内存位置开始重新解释较小数量的位”请删除此项。它不会回答问题-您将得到您的代表back@Mr_and_Mrs_D看来我的代表回来了,还有更多的:D
short s = 696; // 0000 0010 1011 1000
byte x = (byte)s;
System.out.println("byte x = " + x);
byte x = -72