当前位置: 首页 > 面试题库 >

Java中Integer.MAX_VALUE的乘法

佘修为
2023-03-14
问题内容

我只是在玩Java。编写了这个小程序:

public class MaxValue{
    public static void main(String[] args){
        int i  =  Integer.MAX_VALUE;
        for(int j = 1; j<=10;j++){
            System.out.println(i*j);
        }
    }
}

输出如下:

2147483647

-2

2147483645

-4

2147483643

-6

2147483641

-8

2147483639

-10

现在我很惊讶。我不知道如何解释这个输出。我知道我可以使用long代替大于整数的最大限制来处理值。但是我只想知道java如何计算这个?


问题答案:

我们需要分析结果的二进制内容:

Integer.MAX_VALUE * 1 = 0x7fffffff(十进制2147483647)

Integer.MAX_VALUE * 2 = 0xfffffffe,即-2

Integer.MAX_VALUE * 3 = 0x17ffffffd,但它是33位,在被截断后,它是0x7ffffffd,即2147483645

等等…



 类似资料:
  • 2147483647 -2 2147483645 现在我很惊讶。我不知道如何解释这个输出。我知道我可以使用long代替处理超过整数最大限制的值。然而,我只想知道java是如何计算这个的?

  • 问题内容: java中双值的乘法运算符的保证精度是多少? 例如,2.2 * 100是220.00000000000003,但是220是双精度数。220.00000000000003是220之后的下一个两倍。 问题答案: 乘法工作正常,但不能精确表示为双精度。最接近的双打是: 2.199999999999999733(0x4001999999999999) 2.200000000000000177(

  • 问题内容: 昨天我问一个问题关于并行矩阵乘法Java 7中使用fork /join框架这里。在axtavt的帮助下,我的示例程序开始工作。现在,我仅使用Java 6功能来实现等效程序。我遇到了与昨天相同的问题,尽管应用了axtavt给我的反馈(我认为)。我在俯视什么吗?码: 问题答案: 阅读了这个问题后,我决定改编我的程序。我的新程序无需同步即可运行良好。谢谢您的想法,彼得。 新代码:

  • 问题内容: 在Java中,有什么方法可以得到2 的乘法的高半部分吗?即由于溢出而消失的部分。(因此128位结果的高64位) 我习惯于在命令执行以下操作的地方编写OpenCL代码:http : //www.khronos.org/registry/cl/sdk/1.0/docs/man/xhtml/mul_hi.html 由于OpenCL可以在我的CPU上有效地执行此操作,因此Java应该也可以执行

  • 为什么用乘以相同的int num,结果会返回1?注意,我在int可能值的极限。 我已经尝试捕获异常,但仍然给出结果为1。

  • 只剩下一个嵌套娃娃了,我们有我们的答案:100个。输入/输出 我已经开始像这样解决它,但我不确定是否需要将这个数组的每两个元素的和复制到新的数组中,以及如何循环。同样,这个循环提供了每个连续元素的和,而不是每对元素的和。很抱歉问了这么愚蠢的问题,如果有人愿意帮忙,我将非常感谢。