Java 溢出在计算器上计算时与 IDE 结果不同?



我不明白我所做的计算哪里出了问题,为什么我在 IDE 控制台上收到不同的结果。控制台收到14464的结果,用于我的ShortTotalprintln。但是通过在计算器上手动计算,我收到了一个类似的数字,但+1哪个是14465

我了解短类型最大值和最小值是什么。这是我到目前为止所做的:

由于短最大值约为32,767.因此,剩余金额再次降至最低。因此,在计算器上,您可以通过执行以下操作来检查这一点:1000 x (bytevalue+shortvalue + intvalue) = 80000.由于80,000大于空头最大价值,因此它会溢出余数。80,000-32767 =47233然后将此值加回最小值,即:- 32768 + 47233 = 14465

我设法接近14464的价值,但不知道为什么我会收到14465

package com.company;
public class Main {
public static void main(String[] args) {
byte ByteValue = 10;
short ShortValue = 20;
int IntValue = 50;
long LongTotal = 50000 + 10 * (ByteValue + ShortValue + IntValue);
System.out.println(LongTotal);
//The issue in question is below.
short ShortTotal = (short) (1000 * (ByteValue + ShortValue + IntValue));
System.out.println(ShortTotal);
}
}

我不明白你的困惑。

80,000 作为int值给出以下位模式:

00000000000000010011100010000000

切断前两个字节会为short值提供以下位模式:

0011100010000000

转换为十进制,这是:

14464

或者换个说法:短线可以表示 2^16 个可能的值:

80000 - (2^16) = 80000 - 65536 = 14464

相关内容

最新更新