【问题标题】:java cannot handle a 32 bit numberjava不能处理32位数字
【发布时间】:2014-12-10 04:20:06
【问题描述】:

我正在尝试将 4294967295 分配给 long。即 (2^32-1) java(netbeans) 给出以下错误消息 “整数太大”

事实上,我试图找出一个 int 可以处理的最大数字(手动完成) 发现是2147483647(当然很明显是2^31-1)

但令人惊讶的是,我发现即使是 long 类型也无法处理比这更大的数字。 int 和 long 没有区别吗?java doc 说 long 是 64 位的

我错过了什么吗?

【问题讨论】:

    标签: java types int long-integer


    【解决方案1】:

    问题是您使用 4294967295 作为 int 文字 - 但它不是有效的 int 值。您希望它是 long 文字,因此您需要在其上加上 L 后缀。这很好:

    long x = 4294967295L;
    

    来自JLS section 3.10.1

    如果整数文字以 ASCII 字母 L 或 l (ell) 为后缀,则它是 long 类型;否则它是 int 类型(§4.2.1)。

    【讨论】:

      【解决方案2】:

      使用较低的l 向编译器显示它是一个长值。

      long l = 4294967295l ;
      

      【讨论】:

        【解决方案3】:

        来自The Java™ Tutorials - Primitive Data Types

        int:默认情况下,int数据类型为32位有符号二进制补码整数,最小值为-231,最大值为231-1。在 Java SE 8 及更高版本中,可以使用 int 数据类型来表示一个无符号的 32 位整数,其最小值为 0,最大值为 232-1。使用 Integer 类将 int 数据类型用作无符号整数。有关更多信息,请参阅数字类部分。在 Integer 类中添加了 compareUnsigned、divideUnsigned 等静态方法,以支持无符号整数的算术运算。

        所以 232-1 = 4294967295

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-04-23
          • 2011-12-22
          • 1970-01-01
          • 2018-09-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-27
          相关资源
          最近更新 更多