C语言符号优先级
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
达式 表达式+表达式 表达式-表达式 变量<<表达式 变量>>表达式 表达式>表达式 表达式>=表达式 表达式<表达式 表达式<=表达式 表达式==表达式 表达式!= 表达式 表达式&表达式 表达式^表达式 表达式|表达式 表达式&&表达式 表达式||表达式 表达式 1? 表达式 2:
表达式 3 变量=表达式 变量/=表达式 变量*=表达式 变量%=表达式
306
附录 2 C 语言中的运算符及其优先级
+=
加后赋值
变量+=表达式
-=
减后赋值
变量-=表达式
<<=
左移后赋值
变量<<=表达式
>>=
右移后赋值
变量>>=表达式
&=
按位与后赋值
变量&=表达式
^=
按位异或后赋值
变量^=表达式
|=
按位或后赋值
百度文库
变量|=表达式
从左向右顺
15
,
逗号运算符
表达式,表达式,… 左到右
序运算
说明:
同一优先级的运算符,运算次序由结合方向所决定。
由于 C 语言中运算符多,优先级复杂,难以记忆,针对上述运算符,我们可以归纳成几名口
诀,以便于记忆:
优先级口诀
括号成员第一; 全体单目第二; 乘除余三,加减四; 移位五,关系六; 等于(与)不等排第七; 位与异或和位或; "三分天下"八九十; 逻辑或跟与; 十二和十一; 条件高于赋值, 逗号运算级最低!
括号运算符[]() 成员运算符. -> 所有的单目运算符比如++ -- +(正) -(负) 指针运算*& 这个"余"是指取余运算即% 移位运算符:<< >> ,关系:> < >= <= 等 即== != 这几个都是位运算: 位与(&)异或(^)位或(|)
逻辑运算符:|| 和 && 注意顺序:优先级(||) 底于 优先级(&&) 三目运算符优先级排到 13 位只比赋值运算符和","高 逗号运算符优先级最低
条件运算符
赋值运算符 除后赋值 乘后赋值
取模后赋值
使用形式 数组名[常量表达式] (表达式)/函数名
(形参表) 对象.成员名 对象指针->成员名
-表达式 (数据类型)表达式 ++变量名/变量名++ --变量名/变量名--
*指针变量 &变量名 !表达式 ~表达式 sizeof(表达式) 表达式/表达式 表达式*表达式 整型表达式/整型表
C 语言运算符优先级表(由上至下,优先级依次递减)
运算符 结合性
307
附录 2 C 语言中的运算符及其优先级
() [] -> .
自左向右
! ~ ++ -- - (type) * & sizeof
自右向左
* /%
自左向右
+ -
自左向右
<< >> 自左向右
< <= > >=
自左向右
== != 自左向右
&
308
自左向右
^ 自左向右
| 自左向右
&& 自左向右
|| 自左向右
?: 自右向左
Assignments 自右向左
, 自左向右
附录 2 C 语言中的运算符及其优先级
第一、像() [] -> .之类的理所当然是最优先的,其实它们压根也不算什么运算符了 第二、除了上面的四种运算符之外,接下来就是单目运算符,也就是!
总结一下,按运算符优先级从高到低:单目运算符->双目运算符->三目运算符->赋值 运算符->逗号运算符
特别在双目运算符中,按 运算符优先级从高到低:算术运算符->移位运算符->关系 运算符(其中== 和 !=优先级又较低)->逻辑运算符(按位与-〉按位异或-〉按位或-〉逻 辑与-〉逻辑或)!
310
C 优先级的口诀 收藏 学习 C 语言也有一段时间了,感觉 C 语言的运算符优先级很难记住,特别是对于初学者而言! 也许你会说没有记住没关系,用括号来改变优先级就可以了。但是很多情况下,因为依赖括 号很容易导致程序可读性差,当然我不是反对加括号,只是提倡恰到好 处。总之,还是记住好些,读别人的程序也方便点。近来翻看了一下优先级,感觉还是有规 律可循的,拿来和大家分享,希望对大家有帮助! 先给出 C 语言的运算符优先级表:
= /= *= %=
名称或含义 数组下标
圆括号
成员选择(对象) 成员选择(指针)
负号运算符 强制类型转换
自增运算符 自减运算符 取值运算符 取地址运算符 逻辑非运算符 按位取反运算符 长度运算符
除 乘
余数(取模)
加 减 左移 右移 大于 大于等于 小于 小于等于 等于 不等于 按位与 按位异或 按位或 逻辑与 逻辑或
> >=比== !=的优先级来得高。此外,在逻辑运算符中,与运算又比或运算优先级来得 高,异或则处于二者之间。同样的,你可以类比出&&与||的优先级关系. 第四、在双目操作符之后,就是三目操作符了,没有什么好说的了。 第五、然后是赋值操作符,你也许会把赋值操作符与三目运算符的优先级搞混。没有关系, 我想你一定写过这样的语句(如果没有,请你记住!):max = (a>b)?a:b; ,从这个语句里, 你就不难记住赋值运算符为什么比三目运算符的优先级低了! 第六、逗号运算符是分割各个子语句的(感觉这么说有点不准确,不过我想大家会明白我的 意思的),自然优先级最低了,我想这个应该不是很容易混淆的。
~ ++ -- - (type) * & sizeof 了。记住它们的顺序可是自右向左啊!其实结合实例是 很容易理解的,比如 i++等。 第三、跟着就是双目运算符了,也是 C 语言运算符优先级中最容易让人混淆的地方了。其 实
309
附录 2 C 语言中的运算符及其优先级
也没有那么可怕,你认真观察就会发现。在双目运算符中,算术运算 符优先级最高,然后 是移位运算符,接着是关系运算符,再着是逻辑运算符。不过这边需要说的是,在关系运算 符中,< <=
结合方向 左到右
右到左
左到右 左到右 左到右 左到右 左到右 左到右 左到右 左到右 左到右 左到右 右到左 右到左
说明
单目运算符
单目运算符 单目运算符 单目运算符 单目运算符 单目运算符 单目运算符
双目运算符 双目运算符 双目运算符 双目运算符 双目运算符 双目运算符 双目运算符 双目运算符 双目运算符 双目运算符 双目运算符 双目运算符 双目运算符 双目运算符 双目运算符 双目运算符 双目运算符 双目运算符 三目运算符
附录 2 C 语言中的运算符及其优先级
附录 2 C 语言中的运算符及其优先级
优先级 1
2
3 4 5 6 7 8 9 10 11 12 13 14
运算符 []
()
. -> (类型) ++ -* & ! ~ sizeof / *
%
+ << >> > >= < <= == != & ^ | && ||
?:
表达式 3 变量=表达式 变量/=表达式 变量*=表达式 变量%=表达式
306
附录 2 C 语言中的运算符及其优先级
+=
加后赋值
变量+=表达式
-=
减后赋值
变量-=表达式
<<=
左移后赋值
变量<<=表达式
>>=
右移后赋值
变量>>=表达式
&=
按位与后赋值
变量&=表达式
^=
按位异或后赋值
变量^=表达式
|=
按位或后赋值
百度文库
变量|=表达式
从左向右顺
15
,
逗号运算符
表达式,表达式,… 左到右
序运算
说明:
同一优先级的运算符,运算次序由结合方向所决定。
由于 C 语言中运算符多,优先级复杂,难以记忆,针对上述运算符,我们可以归纳成几名口
诀,以便于记忆:
优先级口诀
括号成员第一; 全体单目第二; 乘除余三,加减四; 移位五,关系六; 等于(与)不等排第七; 位与异或和位或; "三分天下"八九十; 逻辑或跟与; 十二和十一; 条件高于赋值, 逗号运算级最低!
括号运算符[]() 成员运算符. -> 所有的单目运算符比如++ -- +(正) -(负) 指针运算*& 这个"余"是指取余运算即% 移位运算符:<< >> ,关系:> < >= <= 等 即== != 这几个都是位运算: 位与(&)异或(^)位或(|)
逻辑运算符:|| 和 && 注意顺序:优先级(||) 底于 优先级(&&) 三目运算符优先级排到 13 位只比赋值运算符和","高 逗号运算符优先级最低
条件运算符
赋值运算符 除后赋值 乘后赋值
取模后赋值
使用形式 数组名[常量表达式] (表达式)/函数名
(形参表) 对象.成员名 对象指针->成员名
-表达式 (数据类型)表达式 ++变量名/变量名++ --变量名/变量名--
*指针变量 &变量名 !表达式 ~表达式 sizeof(表达式) 表达式/表达式 表达式*表达式 整型表达式/整型表
C 语言运算符优先级表(由上至下,优先级依次递减)
运算符 结合性
307
附录 2 C 语言中的运算符及其优先级
() [] -> .
自左向右
! ~ ++ -- - (type) * & sizeof
自右向左
* /%
自左向右
+ -
自左向右
<< >> 自左向右
< <= > >=
自左向右
== != 自左向右
&
308
自左向右
^ 自左向右
| 自左向右
&& 自左向右
|| 自左向右
?: 自右向左
Assignments 自右向左
, 自左向右
附录 2 C 语言中的运算符及其优先级
第一、像() [] -> .之类的理所当然是最优先的,其实它们压根也不算什么运算符了 第二、除了上面的四种运算符之外,接下来就是单目运算符,也就是!
总结一下,按运算符优先级从高到低:单目运算符->双目运算符->三目运算符->赋值 运算符->逗号运算符
特别在双目运算符中,按 运算符优先级从高到低:算术运算符->移位运算符->关系 运算符(其中== 和 !=优先级又较低)->逻辑运算符(按位与-〉按位异或-〉按位或-〉逻 辑与-〉逻辑或)!
310
C 优先级的口诀 收藏 学习 C 语言也有一段时间了,感觉 C 语言的运算符优先级很难记住,特别是对于初学者而言! 也许你会说没有记住没关系,用括号来改变优先级就可以了。但是很多情况下,因为依赖括 号很容易导致程序可读性差,当然我不是反对加括号,只是提倡恰到好 处。总之,还是记住好些,读别人的程序也方便点。近来翻看了一下优先级,感觉还是有规 律可循的,拿来和大家分享,希望对大家有帮助! 先给出 C 语言的运算符优先级表:
= /= *= %=
名称或含义 数组下标
圆括号
成员选择(对象) 成员选择(指针)
负号运算符 强制类型转换
自增运算符 自减运算符 取值运算符 取地址运算符 逻辑非运算符 按位取反运算符 长度运算符
除 乘
余数(取模)
加 减 左移 右移 大于 大于等于 小于 小于等于 等于 不等于 按位与 按位异或 按位或 逻辑与 逻辑或
> >=比== !=的优先级来得高。此外,在逻辑运算符中,与运算又比或运算优先级来得 高,异或则处于二者之间。同样的,你可以类比出&&与||的优先级关系. 第四、在双目操作符之后,就是三目操作符了,没有什么好说的了。 第五、然后是赋值操作符,你也许会把赋值操作符与三目运算符的优先级搞混。没有关系, 我想你一定写过这样的语句(如果没有,请你记住!):max = (a>b)?a:b; ,从这个语句里, 你就不难记住赋值运算符为什么比三目运算符的优先级低了! 第六、逗号运算符是分割各个子语句的(感觉这么说有点不准确,不过我想大家会明白我的 意思的),自然优先级最低了,我想这个应该不是很容易混淆的。
~ ++ -- - (type) * & sizeof 了。记住它们的顺序可是自右向左啊!其实结合实例是 很容易理解的,比如 i++等。 第三、跟着就是双目运算符了,也是 C 语言运算符优先级中最容易让人混淆的地方了。其 实
309
附录 2 C 语言中的运算符及其优先级
也没有那么可怕,你认真观察就会发现。在双目运算符中,算术运算 符优先级最高,然后 是移位运算符,接着是关系运算符,再着是逻辑运算符。不过这边需要说的是,在关系运算 符中,< <=
结合方向 左到右
右到左
左到右 左到右 左到右 左到右 左到右 左到右 左到右 左到右 左到右 左到右 右到左 右到左
说明
单目运算符
单目运算符 单目运算符 单目运算符 单目运算符 单目运算符 单目运算符
双目运算符 双目运算符 双目运算符 双目运算符 双目运算符 双目运算符 双目运算符 双目运算符 双目运算符 双目运算符 双目运算符 双目运算符 双目运算符 双目运算符 双目运算符 双目运算符 双目运算符 双目运算符 三目运算符
附录 2 C 语言中的运算符及其优先级
附录 2 C 语言中的运算符及其优先级
优先级 1
2
3 4 5 6 7 8 9 10 11 12 13 14
运算符 []
()
. -> (类型) ++ -* & ! ~ sizeof / *
%
+ << >> > >= < <= == != & ^ | && ||
?: