整数的溢出 求人解释下为什么结果是这个 还有为什么 x*x 是等于0 而Math.pow(x,2)却不是啊?头都大了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Open Declaration double java.lang.Math.pow(double a, double b)我觉得可能的原因是pow里面是double??要不你试试x用double型的看看,好吧,其实我也不知道什么原因 Math.Pow 方法 (Double, Double) 你这代码一看就是个死循环,等到x的值超过了int的范围才报错 因为刚好返回一个负数,满足小于0的条件才退出while,然后打印信息 仔细分析下就明白结果怎么来的了: 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。 actionListener事件,点击以后卡住了 JNI传递对象技术!(小弟要写一个接口程序,有经验者请赐教) 我机器上的软件是否有功能重叠的? 对于出初学者来说,选择那些书比较好? 需要取当前页面上一段HTML存放到seesion中 不错的题目,你试一下 我用JBuild编译后的class文件,用jdk的java Main运行出现如下错误 金山词霸类软件是怎样实现的 请教:一个没理由出现的怪问题 送分!大家好!小弟初来此处,还望大家多多关照 JVM卡死,Eden Space为100%,求解决方案 关于数据库操作问题,添加记录没问题,但是查询就报异常!求大神解决!
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。