C语言1/3*3的结果是?

测试环境:

VC6.0

1、求1/3 * 3的值

示例代码如下:

1
2
3
4
5
6
7
#include <stdio.h>

void main(){

printf("%d\n",1/3*3);

}

运算结果是 0,为什么是0呢?

1/3*3 表达式

先计算1/3,两边都是整型,其结果也是整型,所以 1/3结果为0,接着计算0*3,两边都是整型,其结果为也为整型,结果为0,最后以%d格式化输出,所以输出结果为0

2、求1.0/3 * 3的值

示例代码如下:

1
2
3
4
5
6
7
#include <stdio.h>

void main(){

printf("%lf\n",1.0/3*3);

}

运算结果是 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.0`是浮点型数据类型,在运算过程中,会转换成双精度浮点数据,`3`是整型,运算符两边的数据类型要一致,且往数据长度增加的方向进行,以保证精度不降低。所以,整数3会转化为双精度的浮点类型,结果也为双精度的数据类型,结果为`0.333...`,接着`0.333...`和整数`3`相乘 ,其结果应该为双精度的数据类型,按道理来说就是 `0.999...

那么为何会输出1.00000

简单证明:

1
0.999... = 1

分数法

1
2
3
0.333... = 1/3
3*0.333... = 3*1/3 = 1
0.999... = 1

代数法

1
2
3
4
5
c = 0.999...
10c = 9.999...
10c-c= 9.999... - 0.999...
9c=9
c=1

所以,1.0/3 * 3的运算结果为1.000000(其结果数据类型为双精度,默认输出6位小数)

3、求3/2的值

其值为1,这里就不再分析了,根据上面两个例题,相信你可以很容易就分析出来

示例代码如下:

1
2
3
4
5
6
7
#include <stdio.h>

void main(){

printf("%d\n",3/2);

}

注:这里有一个需要注意的问题,使用printf语句打印的时候,格式化数据类型要正确,比如 3/2的结果是整形,那么请以%d的格式输出。

这里留一个小疑问,如果3/2%f的格式输出,其结果又是什么呢?


C语言1/3*3的结果是?
http://cxycsx.vip/2023/08/31/其他/C语言1-3-3的结果是?/
作者
程序员陈师兄
发布于
2023年8月31日
许可协议