为什么整数比较给出错误的结果?

时间:2019-05-14 11:38:45

标签: java

我一直在尝试解决一个问题,该问题要求我编写一个名为mySqrt的函数int mySqrt(int x)

我应该计算并返回x的平方根,其中x保证是一个非负整数。

由于返回类型是整数,因此十进制数字将被截断,并且仅返回结果的整数部分。

我尝试实现一种简单的算法,该算法从i=0开始,然后将i的值递增到$i*i<=x$,然后返回i-1

public int mySqrt(int x) {
    int i=0;
    while(i*i<=x){
        i++;
    }
    return (i-1);
}

我对正在发生的事情有所了解,但我真的不明白为什么。 当我足够大时,i^2 >2^31-1(i*i<=x)的while循环x=2147395600中的比较(小于2^31-1)使我成真。为什么会这样呢?结果,我得到了垃圾结果。当我尝试评估(i^2<=x时无法再将i^2存储在int中时,到底发生了什么?

0 个答案:

没有答案