C语言—知识点—操作符2

整形提升

说明:C的整型算术运算总是至少以缺省整型类型的精度来计算的。为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升。 

int main()
{
	char a, b, c;
	...
	a = b + c;
	return 0;
}

b和c的值被提升为普通整型,然后再执行加法运算。 加法运算完成后,结果将被截断,然后再储存于a中。并且,整型提升是按照变量的数据类型的符号位来提升的,无符号整型提升,高位直接补0。

示例:

int main()
{
	char c = 1;
	printf("%u\n", sizeof(c));
	printf("%u\n", sizeof(+c));
	printf("%u\n", sizeof(-c));

	return 0;
}

输出结果:1 4 4  因为+c和-c是一个表达式,经过了整型提升。 

操作符的优先级

说明:从上到下优先级依次降低。 

问题表达式

此外还有一些问题表达式要注意,不要写错

问题表达式1:

int main()
{
	a* b + c * d + e * f;//问题表达式
    c+ --c;//问题表达式

	return 0;
}

a,b,c可能是三个表达式,执行的顺序可能会影响a,b,c本身的值。因此(a*b)+(c*d)+(e*f)不等于(a*b+c*d)+e*f。但是以上顺序在该表达式中都是允许的,因此,该表达式是问题表达式。 

问题表达式2:

int main()
{
	int a = 1;
	int	b = (++a) + (++a) + (++a);
	printf("%d\n", b);
	return 0;
}

先算三个++a再求和与先算前两个++a并求和的结果是不同的。

所以,尽可能简化表达式,避免出现问题表达式。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值