可以用long加一个整数吗?

时间:2014-07-02 03:20:47

标签: java long-integer

我很抱歉这样一个蹩脚的问题。我会自己测试一下......但遗憾的是我不知道如何编写java代码,并且不值得回答这个问题。

是否可以一起添加长整数? 我的朋友正在研究一个项目,我认为他可以通过使用long而不是整数来修复他的一个错误。 (他希望数字高于21.47亿)。

我尝试自己做了一些研究,我很惊讶答案并不容易找到。这是我能够找到的一个信息来源。

“如果其中一个或两个整数类型都很长,则结果很长。” https://community.oracle.com/message/5270213

这是对的吗?再次,抱歉我自己无法测试这个。

3 个答案:

答案 0 :(得分:7)

是的,您可以添加longint就好了,最后会得到long

int经历了扩展的原语转换,如Java语言规范中所述,特别是JLS8, §5.1.2

JLS8 §5.6.2是详细说明这里发生的事情的重要部分(我的粗体):

  

应用扩展基元转换(第5.1.2节)来转换以下规则指定的一个或两个操作数:

     

如果任一操作数的类型为double,则另一个操作数转换为double。

     

否则,如果任一操作数的类型为float,则另一个操作数转换为float。

     

否则,如果任一操作数的类型为long,则另一个操作数转换为long。

     

否则,两个操作数都将转换为int类型。

答案 1 :(得分:1)

是的,您可以一起添加长整数。在java中有几种原始数据类型。 intlong变量是其中两个。这两种数据类型用于存储整数值。差异是变量的大小,

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)