黑马程序员技术交流社区

标题: 为什么 -0/3 结果是 0,而 -0.0/3.0 结果是 -0.0? [打印本页]

作者: 黑马潘浩    时间: 2013-3-9 22:46
标题: 为什么 -0/3 结果是 0,而 -0.0/3.0 结果是 -0.0?
本帖最后由 黑马潘浩 于 2013-3-10 11:01 编辑

如题:为什么 -0/3 结果是 0,而  -0.0/3.0 结果是 -0.0?

作者: 郑志强    时间: 2013-3-9 22:57
int类型的数除以int类型的数等于int 类型的数

double类型的数除以double类型的数等于double类型的数

int 类型的数除以doubole类型的数会是int 但他会隐式转换为double类型


作者: 张宁    时间: 2013-3-9 23:12
在Java里,整数是用补码表示的。在补码中0只有一种表示方法。另一方面,浮点数则是用 IEEE 标准表示的, 对于0有两种表示方法, 0 和 -0。。。这看上去有点奇怪,但是是规定了。小问题。记住就是了。
作者: 张卫刚    时间: 2013-3-9 23:20
为什么 -0/3 结果是 0,而  -0.0/3.0 结果是 -0.0?
答:
1:0除以任何数都得0,0跟-0有什区别,没区别; 不定义默认为int型,所以-0/3 结果只取商,所以是0  【0比较特殊嘛】
2: -0.0/3.0 java默认是double型的,double对精度要求高,所以结果是 -0.0

作者: 曾钦    时间: 2013-3-9 23:22
试了下,还真是这样。记住了。。
还试了下
-0/3.0  =》 0.0
-0.0/3  =》 -0.0

求大神出来分析解释下~

作者: 戴乾刚    时间: 2013-3-9 23:30
四楼正解、、顶一个
作者: 黑马17期-闫东东    时间: 2013-3-9 23:52
小总结:
          1.当两个变量做运算,如果类型一样,那么结果与其类型一样。
        2.当两个变量做运算,类型不一样,其结果取精度高的类型。
        3.如果byte short char 三种数据类型做运算,会先将自己转换成int在参与运算.

如果左边数比右边小,那么结果就是左边的数
如果出现负数,那么结果只与左边数的正负有关 ,做运算时通过绝对值操作。
System.out.println(3%-10);3
System.out.println(-3%10);-3
System.out.println(-3%-10);-3

作者: 黑马17期-闫东东    时间: 2013-3-10 14:08
黑马17期-闫东东 发表于 2013-3-9 23:52
小总结:
          1.当两个变量做运算,如果类型一样,那么结果与其类型一样。
        2.当两个变量做运算,类 ...

给点分吧:'(




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