黑马程序员技术交流社区

标题: 来看个简单的 小问题 [打印本页]

作者: Akm    时间: 2013-9-7 17:01
标题: 来看个简单的 小问题
本帖最后由 杨增坤 于 2013-9-8 07:25 编辑

不要在电脑上运行,看下面代码的输出结果是多少: public class Demo{
public static void main(String[] args) {
        System.out.println(2147483647 + 1);
   }
}
又一次失误了. .




作者: 李锡碧    时间: 2013-9-7 17:13
本帖最后由 李锡碧 于 2013-9-7 17:16 编辑

数据溢出  int 32位 -2147483648 ~ 2147483647
解决方法 System.out.println((long)2147483647 + 1);

作者: 小冰块    时间: 2013-9-7 17:31
2147483647是int的最大数值,所有位数上全部为1,我以为加1后如果不报错就会变成全0,然后我就以为可能会输出0——我真傻,真的,全0不代表就是0啊{:soso_e127:},实验表明,结果是-2147483648。

所以0的实际情况是在int型的32位上,符号位是1,后面全是0?求真相,我的操作系统是体育老师教的……{:soso_e127:}
作者: 小冰块    时间: 2013-9-7 17:33
同样的,如果输出-2147483648-1,就会输出2147483647……
作者: 小冰块    时间: 2013-9-7 17:38
小冰块 发表于 2013-9-7 17:31
2147483647是int的最大数值,所有位数上全部为1,我以为加1后如果不报错就会变成全0,然后我就以为可能会输 ...

刚反应过来,符号位是0代表正数,符号位1才代表负数。我的操作系统果然是体育老师教的TAT……
作者: 赵凯    时间: 2013-9-7 17:56
数据溢出啊,2147483647是int的最大值,如果你在前边加上long就可以了,或者加上double也可以
作者: joechen    时间: 2013-9-7 18:51
没怎么明白..
作者: lonely_zb    时间: 2013-9-8 03:08
数据溢出,2147483647是int的最大值,将其转换为精度,范围更广的类型就可以,比如double,long...都行
作者: 王广亚    时间: 2013-9-8 08:00
类似的题:
  1. public class ddd {
  2.        
  3.                  public static void main(String[] args) {
  4.                          System.out.println((byte)(127 + 1));
  5.                     }
  6.                  
  7. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2