c语言中的自动类型转换

问题:输入一个值,若小于110(规定用100的1.1倍表示)输出YES。

最初代码:

#include <stdio.h>
int mian(void){
	int a,b=100;
	scanf("%d",&a);
	if(a<1.1*b){
		printf("YES\n");
	}
	return 0;
}

运行结果:
在这里插入图片描述
修改后代码:

#include <stdio.h>
int main(void){
	int a,b=100;
	double n;
	n=1.1*b;
	scanf("%d",&a);
	if(a<n){
		printf("YES\n");
	}
	return 0;
}

运行结果:

问题原因:1.1*b 表达式的值为double类型的110.000000。

C语言自动类型转换规则:

1、若参与运算量的类型不同,则先转换成同一类型,然后进行运算。
2、转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。
a、若两种类型的字节数不同,转换成字节数高的类型。
b、若两种类型的字节数相同,且一种有符号,一种无符号,则转换成无符号类型。
3、所有的浮点运算都是以双精度进行的。
4、char型和short型参与运算时,必须先转换成int型。
5、在赋值运算中,“ = ” 两边的数据类型不同时, “ = ” 右边的类型将转换为左边的类型。
6、当浮点类型被 降级(把一种类型转换成更低级别的类型)为整数类型时,原来的浮点值会被 截断(小数部分丢弃)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值