将任何值添加到最大整数值都会给出错误的计算
Posted
技术标签:
【中文标题】将任何值添加到最大整数值都会给出错误的计算【英文标题】:Adding any value to maximum integer value is giving wrong calculation 【发布时间】:2017-05-04 14:49:00 【问题描述】:我添加两个数字 2147483647 和 45
public void checkIntAdd()
int intMax = 2147483647;
int anyNumber = 26;
int number = intMax+anyNumber;
System.out.println("Wrong Calculation -"+number);
我们应该回答
"2147483692
" 但它会以
的形式出现-2147483604
我觉得它正在失去一些价值
但是当我尝试这种类型的东西时,它给出了编译错误
public void checkShortAdd()
short intMax = 214;
short anyNumber = 26;
short number = intMax+anyNumber; // error is coming Type mismatch: cannot convert from int to short
System.out.println("Wrong Calculation -"+number);
// 出现错误类型不匹配:无法从 int 转换为 short
我无法理解它的原因。
当我添加演员表时,它工作正常
short number = (short) (intMax+anyNumber);
编译器应该给出类似的int加法错误,以便用户可以注意它会超出范围,就像在短的情况下一样
【问题讨论】:
你得到的结果不是2147483604
。它是-2147483604
。
添加两条 short 最终可能是一个 int 无法放入 short 中。
我们应该回答2147483692.....怎么办?
在添加之前尝试将 short 转换为 int。在演员表周围加上括号以确保它首先发生。似乎编译器希望在数学发生之前将 int 转换为 short,但 int 太大而无法降级为 short。
@Jaroslaw Pawlak 纠正了它
【参考方案1】:
数字 1:第一个数字是 Java 中的最大整数大小。你可以用
Integer.MAX_VALUE
你可以使用
BigInteger reallyBig = new BigInteger("1234567890123456890");
第 2 点:在 Java 中,它在于语言的基本编码。简化,你可以说short + short = int,所以你必须将它转换为正确的解决方案
来源:https://www.reddit.com/r/learnprogramming/comments/3refus/in_java_why_is_the_sum_of_2_shorts_an_int/
【讨论】:
【参考方案2】:TL、DR...
这是有效的short intMax = 214;
,因为即使你 214 是一个 int 字面量,它也适合短...,short anyNumber = 26;
也是如此
现在java编译器不能保证这个
short number = intMax + anyNumber;
仍然可以适合短变量,所以你需要转换
short number = (short) (intMax + anyNumber);
【讨论】:
我可以对 int 说同样的话,也不需要类型转换 在我的示例中,我仅添加了两条短裤并将其分配给仅一条短裤【参考方案3】:根据java语言规范
Java 虚拟机指令集中的大多数指令对它们执行的操作的类型信息进行编码。例如,iload 指令 (§iload) 将必须是 int 的局部变量的内容加载到操作数堆栈上。 fload 指令 (§fload) 对浮点值执行相同的操作。这两条指令可能具有相同的实现,但具有不同的操作码。
此表中没有短字节字符的操作。
Java 虚拟机实际类型与 Java 虚拟机计算类型之间的映射为
其中说短默认类型仅为 int
所以我只想深入了解我的程序,所以我只是运行一个命令
javap -verbose RunTimeS.class
输出包含
iload_1
该整数正在加载
【讨论】:
以上是关于将任何值添加到最大整数值都会给出错误的计算的主要内容,如果未能解决你的问题,请参考以下文章