C语言中表达式18/4*sqrt(4.0)/8最后的结果是0,为什么?
来源:学生作业帮 编辑:百度作业网作业帮 分类:综合作业 时间:2024/04/30 01:28:25
C语言中表达式18/4*sqrt(4.0)/8最后的结果是0,为什么?
已上机运行过,最后结果为0,不是1.
已上机运行过,最后结果为0,不是1.
问题就出在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的值