我不明白我所做的计算哪里出了问题,为什么我在 IDE 控制台上收到不同的结果。控制台收到14464
的结果,用于我的ShortTotal
的println
。但是通过在计算器上手动计算,我收到了一个类似的数字,但+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