C易错注意之表达式求值,整型提升,算术转换

目录

引言 

一:运算符的优先级和结合性

1,优先级

2.各种运算符的优先级的表

3.运算符的结合性 

4.通过优先级和结合性,基本可以确定表达式的求值顺序,但不能完全确定的

二:整型提升和算术转换

1.整型提升

1.基本大意

C语⾔中整型算术运算总是⾄少以缺省整型类型的精度来进⾏的

为了获得这个精度,表达式中的字符和短整型操作数在使⽤之前被转换为普通整型,这种转换称为整 型提升。

2.整型提升的意义

3.举例说明

4.对于char 和short类型数据整型提升时的规则

1. 有符号整数提升是按照变量的数据类型的符号位来提升的

2. ⽆符号整数提升,⾼位补0

3.对于有符号的整数,最高位是符号位

5.解释说明上述例子

三:算术转换

算术转换表

四:结语

接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧

引言 

在求c表达式时,往往在运算中会出现各种想不到的结果出现,不同编译器实现的结果不相同,运算的结果与我们想象中的运算过程千差万别,造成各种困惑,接下来我们就将介绍这些在表达式求值过程中出现的各种意外情况

一:运算符的优先级和结合性

1,优先级

指的是在一个表达式中出现了多个不同的运算符,优先级就将决定在运算时先进行那个运算符计算

相邻操作符之间才拥有的

如:a+b*c  根据运算符的优先级,先执行乘,在执行加

2.各种运算符的优先级的表

3.运算符的结合性 

结合性的是在表达式求值时,在表达式中出现的运算符的优先级相同时,应按照运算符的结合行来决定求值顺序,是从左往右还是从右往左执行

如:a/b*c%d,由上面的优先级表查询得知,这几个运算符的优先级相同,那么应该按照结合性来运算,按照从左往右的顺序执行

4.通过优先级和结合性,基本可以确定表达式的求值顺序,但不能完全确定的

二:整型提升和算术转换

1.整型提升

1.基本大意
C语⾔中整型算术运算总是⾄少以缺省整型类型的精度来进⾏的
为了获得这个精度,表达式中的字符和短整型操作数在使⽤之前被转换为普通整型,这种转换称为整 型提升。
2.整型提升的意义
表达式的整型运算要在CPU的相应运算器件内执⾏,CPU内整型运算器(ALU)的操作数的字节⻓度⼀ 般就是int的字节⻓度,同时也是CPU的通⽤寄存器的⻓度。
因此,即使两个char类型的相加,在CPU执⾏时实际上也要先转换为CPU内整型操作数的标准⻓
度。
通⽤CPU(general-purpose CPU)是难以直接实现两个8⽐特字节直接相加运算(虽然机器指令中 可能有这种字节相加指令)。所以,表达式中各种⻓度可能⼩于int⻓度的整型值,都必须先转换为 int或unsigned int,然后才能送⼊CPU去执⾏运算
3.举例说明

对于这个求值,可以看出求出的结果不是我们所想的那样简单的,而是经过整型提升的结果

4.对于char 和short类型数据整型提升时的规则
1. 有符号整数提升是按照变量的数据类型的符号位来提升的
2. ⽆符号整数提升,⾼位补0
3.对于有符号的整数,最高位是符号位
5.解释说明上述例子

三:算术转换

当我们遇到的表达式在求值过程中各数据的类型各不相同,这就将用到算术转换来计算,将不同类型的数据转换为同一类型,下面就是转换规则

算术转换表

四:结语

在进行表达式求值时要关注这些这些转换规则,计算规则,再来计算表达式的结果

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值