黑马程序员技术交流社区

标题: 不懂的问题 [打印本页]

作者: hacket    时间: 2013-3-21 23:57
标题: 不懂的问题
本帖最后由 hacket 于 2013-3-22 22:05 编辑
  1. public class NumberDemo
  2. {
  3.       public static void main(String args[])
  4.      {
  5.                
  6.         System.out.println(-0/3);
  7.         System.out.println(-0.0/3.0);
  8.    }
  9. }
复制代码
为什么结果是:
0
-0.0


作者: 王俊杰    时间: 2013-3-22 00:15
本帖最后由 王俊杰 于 2013-3-22 00:16 编辑

这是因为在java中整数和浮点数对于0的存储方式不同引起的。

在Java里,整数是用补码表示的。

在补码中0只有一种表示方法。因此-0/3得0

另一方面,浮点数则是用 IEEE 标准表示的, 对于0有两种表示方法, 0 和 -0。因此-0.0/3.0得-0.0

祝你进步!

作者: 朱盛文    时间: 2013-3-22 00:16
  1. public class NumberDemo
  2. {
  3.       public static void main(String args[])
  4.      {
  5.                
  6.         System.out.println(-0/3);        //这两条输出语句都是在进行运算,这里-0/3,-0 和 3 都是整数,默认是 int 类型,所以结果也是 int 类型,输出0。
  7.         System.out.println(-0.0/3.0);  //这里的 -0.0 和 3.0 都是小数,默认是 double 类型,所以结果就是 double 类型,输出就是 -0.0 。
  8.    }
  9. }
复制代码

作者: lxww    时间: 2013-3-22 00:36
第一个结果得到0,好理解,int类型计算最后得到的也是int类型,所以等于0
第二个结果得到-0.0,当一个浮点数运算产生了一个无限接近0并且没有办法正常表示出来的负浮点数,那么负零就产生了。“-0.0”在数值上等于“0.0”,但是一些涉及到“-0.0”的运算在和相同的涉及到“0.0”的运算又不一样。
作者: 唐永康    时间: 2013-3-22 07:59
public class NumberDemo
{
      public static void main(String args[])
     {

        System.out.println(-0/3);
        System.out.println(-0.0/3.0);
   }
}


结果是0和-0.0


第一个结果,因为是int型的,只取整数,而不不存在-0这么一说法,所以只取整数部分,就是0了,
第二个结果是浮点型的,所以就有了小数点,





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