C语言运算符优先级 详细列表
- 格式:doc
- 大小:101.50 KB
- 文档页数:2
c语言运算优先级及运算顺序
C语言中的运算符都有各自的优先级,一般来说,优先级高的运算符先计算,优先级低的运算符后计算。
以下是常见运算符的优先级(从高到低):
1. 括号运算符,例如:( )。
2. 单目运算符,例如:++、--、+、-、!。
3. 算术运算符,例如:*、/、%、+、-。
4. 移位运算符,例如:<<、>>。
5. 关系运算符,例如:>、<、>=、<=。
6. 相等运算符,例如:==、!=。
7. 位运算符,例如:&、|、^、~。
8. 逻辑运算符,例如:&&、||。
9. 条件运算符,例如:?:。
10. 赋值运算符,例如:=、+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=。
在计算时,优先级高的运算符先进行计算,如果两个运算符优先级相同,则按照从左到右的顺序进行计算。
C语言运算符优先级详细列表运算符的优先级:C语言中,运算符的运算优先级共分为15 级。
1 级最高,15级最低。
在表达式中,优先级较高的先于优先级较低的进行运算。
而在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。
运算符的结合性:C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。
例如算术运算符的结合性是自左至右,即先左后右。
如有表达式x-y+z 则y 应先与“-”号结合,执行x-y 运算,然后再执行+z 的运算。
这种自左至右的结合方向就称为“左结合性”。
而自右至左的结合方向称为“右结合性”。
最典型的右结合性运算符是赋值运算符。
如x=y=z,由于“=”的右结合性,应先执行y=z 再执行x=(y=z)运算。
C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。
优先级运算符名称或含义使用形式结合方向说明1 [] 数组下标数组名[常量表达式]左到右() 圆括号(表达式)/函数名(形参表). 成员选择(对象)对象.成员名-> 成员选择(指针)对象指针->成员名2- 负号运算符-表达式右到左单目运算符(类型) 强制类型转换(数据类型)表达式++ 自增运算符++变量名/变量名++ 单目运算符-- 自减运算符--变量名/变量名-- 单目运算符* 取值运算符*指针变量单目运算符& 取地址运算符&变量名单目运算符! 逻辑非运算符!表达式单目运算符~ 按位取反运算符~表达式单目运算符sizeof 长度运算符sizeof(表达式)3/ 除表达式/表达式左到右双目运算符* 乘表达式*表达式双目运算符% 余数(取模)整型表达式/整型表达式双目运算符4 + 加表达式+表达式左到右双目运算符- 减表达式-表达式双目运算符5 << 左移变量<<表达式左到右双目运算符>> 右移变量>>表达式双目运算符6> 大于表达式>表达式左到右双目运算符>= 大于等于表达式>=表达式双目运算符< 小于表达式<表达式双目运算符<= 小于等于表达式<=表达式双目运算符7 == 等于表达式==表达式左到右双目运算符!= 不等于表达式!= 表达式双目运算符8 & 按位与表达式&表达式左到右双目运算符10 | 按位或表达式|表达式左到右双目运算符11 && 逻辑与表达式&&表达式左到右双目运算符12 || 逻辑或表达式||表达式左到右双目运算符13 ?: 条件运算符表达式1? 表达式2:表达式3右到左三目运算符14= 赋值运算符变量=表达式右到左/= 除后赋值变量/=表达式*= 乘后赋值变量*=表达式%= 取模后赋值变量%=表达式+= 加后赋值变量+=表达式-= 减后赋值变量-=表达式<<= 左移后赋值变量<<=表达式>>= 右移后赋值变量>>=表达式&= 按位与后赋值变量&=表达式^= 按位异或后赋值变量^=表达式|= 按位或后赋值变量|=表达式15 , 逗号运算符表达式,表达式,…左到右从左向右顺序运算说明:同一优先级的运算符,运算次序由结合方向所决定。
C 语⾔运算符优先级列表(超详细)每当想找哪个运算符优先级⾼时,很多时候总是想找的就没有,真让⼈⽓愤!现在,终于有个我个⼈觉得⾮常全的,分享给⼤家,欢迎拍砖!数组下标数组名[常量表达式]左到右--圆括号(表达式)/函数名(形参表)--成员选择(对象)对象.成员名--成员选择(指针)对象指针->成员名--负号运算符-表达式单⽬运算符按位取反运算符~表达式⾃增运算符++变量名/变量名++⾃减运算符--变量名/变量名--取值运算符*指针变量取地址运算符&变量名逻辑⾮运算符!表达式强制类型转换(数据类型)表达式--长度运算符sizeof(表达式)--除表达式/表达式左到右双⽬运算符乘表达式*表达式余数(取模)整型表达式%整型表达式加表达式+表达式左到右双⽬运算符减表达式-表达式左移变量<<表达式左到右双⽬运算符右移变量>>表达式 ⼤于表达式>表达式左到右双⽬运算符⼤于等于表达式>=表达式⼩于表达式<表达式⼩于等于表达式<=表达式等于表达式==表达式左到右双⽬运算符不等于表达式!= 表达式按位与表达式&表达式左到右双⽬运算符按位异或表达式^表达式左到右双⽬运算符按位或表达式|表达式左到右双⽬运算符逻辑与表达式&&表达式左到右双⽬运算符逻辑或表达式||表达式左到右双⽬运算符条件运算符表达式1?表达式2: 表达式3三⽬运算符赋值运算符变量=表达式--除后赋值变量/=表达式--乘后赋值变量*=表达式--取模后赋值变量%=表达式--加后赋值变量+=表达式--减后赋值变量-=表达式--左移后赋值变量<<=表达式--右移后赋值变量>>=表达式--按位与后赋值变量&=表达式--按位异或后赋值变量^=表达式--按位或后赋值变量|=表达式--按位或后赋值变量|=表达式--逗号运算符表达式,表达式,…左到右--。
C 语言中的运算符优先级分为三级。
以下是一份详细的C 语言运算符优先级顺序列表:
1. 一级优先级(最高优先级):
- 括号:()
- 数组下标:[]
- 结构体成员运算符:.和->
2. 二级优先级:
- 逻辑非运算符:!
- 按位取反运算符:~
- 前缀增量运算符:--
- 前缀减量运算符:-
- 正号运算符:+
- 负号运算符:-
- 类型转换运算符:(类型)
- 指针运算符:&
- 长度运算符:sizeof
3. 三级优先级:
- 乘法运算符:*
- 除法运算符:/
- 取余(模)运算符:%
- 加法运算符:+
- 减法运算符:-
运算符的优先级与结合性相结合,决定了表达式中多个运算符的计算顺序。
结合性表示运算符之间是如何组合的,例如,一级运算符与二级运算符结合时,优先级较高的二级运算符会先进行计算。
以下是一个示例:
```c
int a = 16, b = 4, c = 2;
int d = a + b * c;
int e = a / b * c;
printf("d=%d, e=%d\n", d, e);
```
在这个例子中,乘法和除法的优先级高于加法,所以先计算乘法和除法,然后再进行加法运算。
最终输出结果为:`d=28, e=4`。
c语言表达式运算优先级
在C语言中,运算符的优先级决定了表达式中各部分计算的顺序。
以下是一个大致的运算符优先级列表,从高到低:
1. 后缀运算符(如`() [] -> . ++ --`)
2. 前缀运算符(如`++ -- + - ! ~`)
3. 乘法类运算符(如`* /`)
4. 加法类运算符(如`+ -`)
5. 移位运算符(如`<< >>`)
6. 关系运算符(如`< <= > >=`)
7. 相等运算符(如`== !=`)
8. 按位与运算符(如`&`)
9. 按位异或运算符(如`^`)
10. 按位或运算符(如`|`)
11. 逻辑与运算符(如`&&`)
12. 逻辑或运算符(如`||`)
13. 条件运算符(如`?:`)
14. 赋值运算符(如`= += -= *= /= %= &= |= ^= <<= >>=`)
15. 逗号运算符(如`,`)
注意,这个列表并不是完全准确的,因为C语言的语法有些复杂,并且某些情况下可以通过使用括号来改变运算顺序。
例如,尽管乘法和除法的优先级高于加法和减法,但如果你在表达式中用括号明确地分组各个部分,那么括号内的运算
将优先执行。
例如:
```c
int a = 5;
int b = 2;
int c = (a + b) * 3; // 这里先计算括号内的加法,然后乘以3,结果为21 ```
在这个例子中,尽管乘法运算符的优先级高于加法,但由于括号的使用,加法先于乘法执行。
c语言中优先级顺序表
C语言中优先级顺序:
1、括号(( ) ):在C语言中,括号具有最高优先级,符号前后的优先级也是一样的;
2、先乘法/除法(*,/):先乘法再除法的优先级高于+-,留意乘除的关系;
3、加法/减法(+,-):加法减法的优先级就相对低一些,但是对于负数来说先计算会更明晰些;
4、左移位(<<)右移位(>>):C语言中左移位右移位的优先级是和乘除/加减平级的,且比其低;
5、关系运算符(>,<,>=,<=,==,!=):C语言中关系运算符的优先级还比较高,且等于号的优先级比最高;
6、位运算符(&,|,^):在C语言中位运算符的优先级位于关系运算符之下,就比上面的低一个级别;
7、逻辑与(&&)及逻辑或(||):C语言中逻辑与及逻辑或的优先级最低,且优先级大小一样。
C语言符号优先级优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右()圆括号(表达式)/函数名(形参表).成员选择(对象)对象.成员名->成员选择(指针)对象指针->成员名2-负号运算符-表达式右到左单目运算符(类型)强制类型转换(数据类型)表达式++自增运算符++变量名/变量名++单目运算符--自减运算符--变量名/变量名--单目运算符*取值运算符*指针变量单目运算符&取地址运算符&变量名单目运算符!逻辑非运算符!表达式单目运算符~按位取反运算符~表达式单目运算符sizeof长度运算符sizeof(表达式)3/除表达式/表达式左到右双目运算符*乘表达式*表达式双目运算符%余数(取模)整型表达式/整型表达式双目运算符4+加表达式+表达式左到右双目运算符-减表达式-表达式双目运算符5<< 左移变量<<表达式左到右双目运算符>> 右移变量>>表达式双目运算符6> 大于表达式>表达式左到右双目运算符>=大于等于表达式>=表达式双目运算符< 小于表达式<表达式双目运算符<=小于等于表达式<=表达式双目运算符7==等于表达式==表达式左到右双目运算符!=不等于表达式!= 表达式双目运算符8&按位与表达式&表达式左到右双目运算符9^按位异或表达式^表达式左到右双目运算符10|按位或表达式|表达式左到右双目运算符11&&逻辑与表达式&&表达式左到右双目运算符12||逻辑或表达式||表达式左到右双目运算符13?:条件运算符表达式1? 表达式2:表达式3右到左三目运算符14=赋值运算符变量=表达式右到左/=除后赋值变量/=表达式*=乘后赋值变量*=表达式%=取模后赋值变量%=表达式+=加后赋值变量+=表达式-=减后赋值变量-=表达式<<=左移后赋值变量<<=表达式>>=右移后赋值变量>>=表达式&=按位与后赋值变量&=表达式^=按位异或后赋值变量^=表达式|=按位或后赋值变量|=表达式15,逗号运算符表达式,表达式,…左到右从左向右顺序运算说明:同一优先级的运算符,运算次序由结合方向所决定。
C语言运算符等级
及结合性
运算符号及注释
1级(左结合)
() 圆括号
[]下标运算符
->指向结构体成员运算符. 结构体成员运算符。
2级(右结合)
!逻辑非运算符
~按位取反运算符++前缀增量运算符--前缀减量运算符
+正号运算符
-负号运算符(类型)类型转换运算符*指针运算符
&地址运算符sizeof长度运算符
3级(左结合)*乘法运算符/除法运算符%取余运算符
4级(左结合)+加法运算符
-减法运算符
5级(左结合)<<左移运算符
>>右移运算符
6级(左结合)<、<=、>、>=关系运算符
7级(左结合)==等于运算符
!=不等于运算符
8级(左结合)&按位与运算符
9级(左结合)^按位异或运算符
10级(左结合)|按位或运算符
11级(左结合)&&逻辑与运算符
12级(左结合)||逻辑或运算符
13级(右结合)? :条件运算符
14级(右结合)=、 +=、 -=、 *=、 /=、 %=、 &=、 ^=、 |=、
<<=、 >>=赋值运算符
15级(左结合),逗号运算符
运算符优先级等级口诀
圆方括号、箭头一句号
自增自减非反负、针强地址长度
乘除
加减
再移位
小等大等
等等不等
八位与
九位异
十位或
十一与
十二或
十三疑
十四赋
十五逗。
c语言中单目运算符的优先级
C语言中的单目运算符(一元运算符)的优先级如下(按照从高到低的顺序):
1. 后置递增和递减运算符:+ +和--
2. 前置递增和递减运算符:+ +和--
3. 一元正号和负号:+和-
4. 逻辑非运算符:!
5. 位求反运算符:~
6. 强制类型转换运算符:(type)
7. 取地址运算符:&
8. 解引用运算符:
9. 大小关系运算符:sizeof
C语言中的优先级规则还受到结合性(associativity)的影响。
对于具有相同优先级的多个运算符,它们的结合性决定了操作数的结合方式。
在上述单目运算符中,递增和递减运算符是右结合的,其他运算符都是左结合的。
在实际编程中,为了避免优先级导致的歧义,建议使用括号明确指定运算顺序。
括号可以提高代码的可读性和可维护性。