C语言1/3*3的结果是?
测试环境:
VC6.0
1、求1/3 * 3的值
示例代码如下:
1 | |
运算结果是 0,为什么是0呢?
1/3*3 表达式
先计算1/3,两边都是整型,其结果也是整型,所以 1/3结果为0,接着计算0*3,两边都是整型,其结果为也为整型,结果为0,最后以%d格式化输出,所以输出结果为0
2、求1.0/3 * 3的值
示例代码如下:
1 | |
运算结果是 1.000000,为什么是1.000000呢?
先计算 1.0/3,1.0为浮点型,3为整型,两边的数据类型不同,那如何计算呢。
在C语言中,不同数据类型的混合运算遵循以下原则:
(1)若参与运算量的类型不同,则先转换成同一类型,然后进行运算
(2)转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算
(3)所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算
(4)char型和short型参与运算时,必须先转换成int型
1 | |
那么为何会输出1.00000
简单证明:
1 | |
分数法
1 | |
代数法
1 | |
所以,1.0/3 * 3的运算结果为1.000000(其结果数据类型为双精度,默认输出6位小数)
3、求3/2的值
其值为1,这里就不再分析了,根据上面两个例题,相信你可以很容易就分析出来
示例代码如下:
1 | |
注:这里有一个需要注意的问题,使用printf语句打印的时候,格式化数据类型要正确,比如 3/2的结果是整形,那么请以%d的格式输出。
这里留一个小疑问,如果3/2以%f的格式输出,其结果又是什么呢?
C语言1/3*3的结果是?
http://cxycsx.vip/2023/08/31/其他/C语言1-3-3的结果是?/