C语言中表达式18/4*sqrt(4.0)/8最后的结果是0,为什么?
来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/07/22 08:48:12
C语言中表达式18/4*sqrt(4.0)/8最后的结果是0,为什么?
已上机运行过,最后结果为0,不是1.
已上机运行过,最后结果为0,不是1.
![C语言中表达式18/4*sqrt(4.0)/8最后的结果是0,为什么?](/uploads/image/z/4479168-48-8.jpg?t=C%E8%AF%AD%E8%A8%80%E4%B8%AD%E8%A1%A8%E8%BE%BE%E5%BC%8F18%2F4%2Asqrt%284.0%29%2F8%E6%9C%80%E5%90%8E%E7%9A%84%E7%BB%93%E6%9E%9C%E6%98%AF0%2C%E4%B8%BA%E4%BB%80%E4%B9%88%3F)
问题就出在sqrt(4.0)上,这是个浮点数,结果是2.0.默认为double类型.
而double类型的存储方式是这样的,8字节,1个符号位,11个指数位,和52个精度位.
于是2.0的表示方法就是0(符号为正)000.01(指数为2^1)0000.0小数为0
如果你直接转换,而不用(int)转换的话,是直接截取末尾32位作为整数的,这样的话就都是0,所以在整数计算结果中就成了0.
如果你这样写:18/4*(int)sqrt(4.0)/8,结果就是你想要的了.
P.S.楼上说的不对,18/4==4
而double类型的存储方式是这样的,8字节,1个符号位,11个指数位,和52个精度位.
于是2.0的表示方法就是0(符号为正)000.01(指数为2^1)0000.0小数为0
如果你直接转换,而不用(int)转换的话,是直接截取末尾32位作为整数的,这样的话就都是0,所以在整数计算结果中就成了0.
如果你这样写:18/4*(int)sqrt(4.0)/8,结果就是你想要的了.
P.S.楼上说的不对,18/4==4
C语言中表达式18/4*sqrt(4.0)/8最后的结果是0,为什么?
C语言中,表达式18/4*sqrt(4.0)/8的数据类型为什么?
表达式18/4*sqrt(4.0)/8值的数据类型是什么,求回答,这是C语言
在C语言中,表达式3/4*8 的结果是?
表达式18/4*sqrt(4.0)/8值的数据类型,为什么?
C语言中,表达式18/4*sqrt(4.0)/8的数据类型是是DOUBLE,是因为所有FLOAT运算时都转成了DOUBL
表达式18/4*sqrt(4.0)/8值的数据类型为什么是double而不是float.
表达式 18/4*sqrt(4.0)/8 值的数据类型为( )
表达式18/4*sqrt(4.0)/8值的数据类型是
表达式18/4*sqrt(4.0)/8值的数据类型为(
C语言中,sqrt
C语言 求表达式sqrt(9.0)+1/5的值