我很抱歉这样一个蹩脚的问题。我会自己测试一下......但遗憾的是我不知道如何编写java代码,并且不值得回答这个问题。
是否可以一起添加长整数? 我的朋友正在研究一个项目,我认为他可以通过使用long而不是整数来修复他的一个错误。 (他希望数字高于21.47亿)。
我尝试自己做了一些研究,我很惊讶答案并不容易找到。这是我能够找到的一个信息来源。
“如果其中一个或两个整数类型都很长,则结果很长。” https://community.oracle.com/message/5270213
这是对的吗?再次,抱歉我自己无法测试这个。
答案 0 :(得分:7)
是的,您可以添加long
和int
就好了,最后会得到long
。
int
经历了扩展的原语转换,如Java语言规范中所述,特别是JLS8, §5.1.2
。
JLS8 §5.6.2
是详细说明这里发生的事情的重要部分(我的粗体):
应用扩展基元转换(第5.1.2节)来转换以下规则指定的一个或两个操作数:
如果任一操作数的类型为double,则另一个操作数转换为double。
否则,如果任一操作数的类型为float,则另一个操作数转换为float。
否则,如果任一操作数的类型为long,则另一个操作数转换为long。
否则,两个操作数都将转换为int类型。
答案 1 :(得分:1)
是的,您可以一起添加长整数。在java中有几种原始数据类型。 int
和long
变量是其中两个。这两种数据类型用于存储整数值。差异是变量的大小,
int
:32位
long
:64位
你可以将int和long加在一起,当jvm添加这两个变量时,结果会生成为long值。所以你必须使用一个长变量来存储答案。这是由于java的自动类型转换。
如果您希望获得int
值作为答案,则必须cast
int
中的长值,
int x=5; //int value
long y = 10; //long value
long z = x + y; //result is a long value(normally jvm does)
int i=(int) (x+y); // result is cast into a int value.
z和i都得到了价值:15
答案 2 :(得分:0)
你可以随时尝试这样的事情。例如,使用jdoodle
正如你所看到的,它是完全可能的。建议使用long
来存储结果,但不是必需的。在后一种情况下溢出的情况下,Java将简单地使用32个最低有效位,因此:
6666555555555544444444443333333333222222222211111111110000000000 (index)
3210987654321098765432109876543210987654321098765432109876543210
----------------------------------------------------------------
0101010101010010000011110010101111101010101111101011101011011101 (value)
将存储为:
33222222222211111111110000000000 (index)
10987654321098765432109876543210
--------------------------------
11101010101111101011101011011101 (value)