求人解释下为什么结果是这个
 
还有为什么 x*x 是等于0  而Math.pow(x,2)却不是啊?头都大了

解决方案 »

  1.   

    Open Declaration double java.lang.Math.pow(double a, double b)我觉得可能的原因是pow里面是double??要不你试试x用double型的看看,好吧,其实我也不知道什么原因
      

  2.   

    Math.Pow 方法 (Double, Double)
      

  3.   

    你这代码一看就是个死循环,等到x的值超过了int的范围才报错
      

  4.   

    因为刚好返回一个负数,满足小于0的条件才退出while,然后打印信息
      

  5.   

            仔细分析下就明白结果怎么来的了:
            1、首先第一个结果,x是溢出了应该都是知道的,在Java中,int类型的变量是4字节的有符号数,也就是32位的(32个二进制),
            有过计算机基础的都应该知道,有符号数首位二进制数是符号位,所以int类型最大的正整数为2^31-1(二进制为0111111...总共31个1)
            当x为最大正整数时,此时在加1,值变为2^31(二进制为10000...总共31个0),前面说了第一位代表符号位,所以此时就是负数,10进制结果为-2147483648
            2、第二个结果,在明白了第一个结果的情况下,x*x就是2^31*2^31=2^62,二进制结果为01000...后面总共62个0,因为java中int是4字节的,当遇到超过位数时,就截取低32位,
            而2^62低32位全是0,所以x*x结果为0。
            3、第三个结果是正确的,因为pow这个函数参数、返回值都是double的,所以没有溢出,只是用科学计数法表示的,用windows自带的计算器计算下可知道,2^62的10进制结果为4611686018427387904。