黑马程序员技术交流社区

标题: 除数为0问题。 [打印本页]

作者: 杨文宇    时间: 2012-7-23 14:33
标题: 除数为0问题。
本帖最后由 杨文宇 于 2012-7-23 15:05 编辑

class Demo4 {
   public static void main(String[] args) {
        System.out.println( 12/0  );// 运行时异常java.lang.ArithmeticException
                System.out.println( 12.0 / 0 ); // [ Infinity ]
                 //为什么这两个运行的结果不一样?

作者: 李东升    时间: 2012-7-23 14:43
Infinity是无穷大的意思。
12/0是被当做了两个int类型的整除,所以会抛异常。
而12.0/0是被当做了两个小数,而且0不是我们看到的0,而是无穷小的数,所以第二个结果是无穷大的数,无法输出出来。
作者: 杨文宇    时间: 2012-7-23 14:49
李东升 发表于 2012-7-23 14:43
Infinity是无穷大的意思。
12/0是被当做了两个int类型的整除,所以会抛异常。
而12.0/0是被当做了两个小数 ...

理解:handshake
作者: rslheima    时间: 2012-7-23 15:33
其实你的问题很不简单的,
原因是整数和浮点数在计算机中的表现形式有很大差别,
对于int类型来说普通计算机上都是用32为二进制来表示的,超过了这个最大值就会抛出异常,因为计算机无法表示
对于浮点型(double,float)在计算机中是使用IEEE754工业标准表示的(计算机系统结构这门课有讲到),他表示的范围很大,但是为了在出现错误条件(譬如算术溢出,给负数开平方根,除以 0 等)时,可以用浮点值集合中的数字来表示所产生的结果,于是就使用了特殊值表示,例如Infinite。
参考资料:http://blog.csdn.net/woshirongshaolin/article/details/7775499
作者: 杨文宇    时间: 2012-7-23 15:44
rslheima 发表于 2012-7-23 15:33
其实你的问题很不简单的,
原因是整数和浮点数在计算机中的表现形式有很大差别,
对于int类型来说普通计算 ...

谢谢,那个资料我看得头晕,先收下了
作者: 郭凯敏    时间: 2012-7-23 15:47
本帖最后由 郭凯敏 于 2012-7-23 15:49 编辑

请问沙发的回答正确吗?如果是正确的,我也记下,这个问题我一直没想过.....请懂得同学确认下
哦哦,我也理解了:
1f/0f结果为正无穷大
1f/-0f结果为负无穷大





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