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

测试环境:

VC6.0

1、求1/3 * 3的值

示例代码如下:

#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的值

示例代码如下:

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

那么为何会输出1.00000

简单证明:

0.999... = 1

分数法

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

代数法

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,这里就不再分析了,根据上面两个例题,相信你可以很容易就分析出来

示例代码如下:

#include <stdio.h>

void main(){

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

}

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

这里留一个小疑问,如果3/2%f的格式输出,其结果又是什么呢?我们将在下一个文章讨论这个问题。

  • 19
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值