黑马程序员技术交流社区

标题: 算法。问题 [打印本页]

作者: 374122761    时间: 2011-12-22 10:10
标题: 算法。问题
本帖最后由 374122761 于 2012-1-3 12:55 编辑

直接写一个  3.0/2.0  然后输出。结果等于1.5   它内部是用取前者一半的算法来算、还是别的什么算法吗?
作者: 房宝彬    时间: 2011-12-22 10:14
我是这么理解的,不知道对不对,3/2=1%1,因为3和2分别是浮点型,小数点后面还有个0继续除%出来的1,也就是0.5,那么结果就是1.5。不知道对不对,请高手解答一下吧
作者: 六期刘健    时间: 2011-12-22 10:20
底层就施行了除法运算!!!
作者: 孙海亮    时间: 2011-12-22 10:22
3.0和2.0都是double型的。所以输出也是double型。如果3/2那么它算出来的结果就是整型的。如果3和2中任何一个为double型的,那么他算出来的结果必然是1.5,这就是自动类型提升。
作者: 房宝彬    时间: 2011-12-22 10:26
对对,楼上正解,想起来了,两个参数都是double类型的,那么结果也一定是double类型,如果楼主想要把结果输出整数“1”,需要强制类型转换就哦了
作者: 应国炎    时间: 2011-12-22 11:52
先向高的提升,再计算.计算结果为高类型
作者: 张振宁    时间: 2011-12-22 16:13
double 除法得的值一定是double 的。
作者: 为梦而战    时间: 2011-12-22 16:31
这个是类型自动转换,如果在一个运算中出现了数值的类型级别的高低,计算机运算的时候会自动将低级别的数值转成高类型的数值后再计算,这是计算机自己计算时的算法。3.0/2.0,3/2,这些在计算机计算的时候都按double类型计算。如果想要的结果是低类型的时候,我们才需要进行强制类型转换,把高级别类型的数值再转成我们需要的低级别的类型使用。
作者: 代臣    时间: 2011-12-23 15:26
由于3.0和2.0是浮点型的,所以它们可以表示为二进制形式,如果3.0是float类型(4个字节):
则3.0的二进制形式为:00000000 00000000 00000000 0000011.0(“.”表示小数点,电脑中小数点数字的二进制表示形式)
3.0/2.0的意思可以用位移运算符来理解,即将3.0的二进制位右移2.0:
3.0>> 2.0
得到00000000 00000000 00000000 000001.10
由二进制转化为十进制就是1+1*2^(-1)=1.5

作者: 374122761    时间: 2012-1-3 12:38
房宝彬 发表于 2011-12-22 10:14
我是这么理解的,不知道对不对,3/2=1%1,因为3和2分别是浮点型,小数点后面还有个0继续除%出来的1,也就是 ...

:lol谢了
作者: 374122761    时间: 2012-1-3 12:38
六期刘健 发表于 2011-12-22 10:20
底层就施行了除法运算!!!

:lol谢了

作者: 374122761    时间: 2012-1-3 12:40
房宝彬 发表于 2011-12-22 10:26
对对,楼上正解,想起来了,两个参数都是double类型的,那么结果也一定是double类型,如果楼主想要把结果输 ...

其实我是以为他内部有别的算法在计算的、这么看来只是因为类型的不同才出这样的结果的
作者: 374122761    时间: 2012-1-3 12:40
为梦而战 发表于 2011-12-22 16:31
这个是类型自动转换,如果在一个运算中出现了数值的类型级别的高低,计算机运算的时候会自动将低级别的数值 ...

:handshake有道理
作者: 为梦而战    时间: 2012-1-3 12:48
374122761 发表于 2012-1-3 12:40
有道理

:handshake




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