栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

整形提升

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

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

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

示例:

int main()
{
	char c = 1;
	printf("%un", sizeof(c));
	printf("%un", sizeof(+c));
	printf("%un", 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("%dn", b);
	return 0;
}

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/997495.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号