C语言第五回合:运算符的优先级
来源:互联网 发布:2018年云计算发展趋势 编辑:程序博客网 时间:2024/05/22 07:08
C语言第五回合:运算符的优先级
【学习目标】
1. 运算符的优先级
2. 运算符的口诀
3. 一些容易错的优先级
4. ++ 和 - -操作符的优先级
A:优先级表
优先级
运算符
名称或含义
使用形式
结合方向
说明
1
[]
数组下标
数组名[常量表达式]
左到右
()
圆括号
(表达式)/函数名(形参表)
.
成员选择(对象)
对象.成员名
->
成员选择(指针)
对象指针->成员名
2
-
负号运算符
-表达式
右到左
单目运算符
(类型)
强制类型转换
(数据类型)表达式
++
自增运算符
++变量名/变量名++
单目运算符
--
自减运算符
--变量名/变量名--
单目运算符
*
取值运算符
*指针变量
单目运算符
&
取地址运算符
&变量名
单目运算符
!
逻辑非运算符
!表达式
单目运算符
~
按位取反运算符
~表达式
单目运算符
sizeof
长度运算符
sizeof(表达式)
3
/
除
表达式/表达式
左到右
双目运算符
*
乘
表达式*表达式
双目运算符
%
余数(取模)
整型表达式/整型表达式
双目运算符
4
+
加
表达式+表达式
左到右
双目运算符
-
减
表达式-表达式
双目运算符
5
<<
左移
变量<<表达式
左到右
双目运算符
>>
右移
变量>>表达式
双目运算符
6
>
大于
表达式>表达式
左到右
双目运算符
>=
大于等于
表达式>=表达式
双目运算符
<
小于
表达式<表达式
双目运算符
<=
小于等于
表达式<=表达式
双目运算符
7
==
等于
表达式==表达式
左到右
双目运算符
!=
不等于
表达式!= 表达式
双目运算符
8
&
按位与
表达式&表达式
左到右
双目运算符
9
^
按位异或
表达式^表达式
左到右
双目运算符
10
|
按位或
表达式|表达式
左到右
双目运算符
11
&&
逻辑与
表达式&&表达式
左到右
双目运算符
12
||
逻辑或
表达式||表达式
左到右
双目运算符
13
?:
条件运算符
表达式1? 表达式2:表达式3
右到左
三目运算符
14
=
赋值运算符
变量=表达式
右到左
/=
除后赋值
变量/=表达式
*=
乘后赋值
变量*=表达式
%=
取模后赋值
变量%=表达式
+=
加后赋值
变量+=表达式
-=
减后赋值
变量-=表达式
<<=
左移后赋值
变量<<=表达式
>>=
右移后赋值
变量>>=表达式
&=
按位与后赋值
变量&=表达式
^=
按位异或后赋值
变量^=表达式
|=
按位或后赋值
变量|=表达式
15
,
逗号运算符
表达式,表达式,…
左到右
从左向右顺序运算
注:一元+、-与*运算符的优先级比相应二元运算符高。
注意,按位运算符 &、^与 | 的优先级比等于运算符 == 与 != 低
!> 算术运算符> 关系运算符> && > || > 赋值运算符
B:运算符顺序口诀
(1)先(括号)内层,后(括号)外层。
解释:有扩号时,最内层的括号中的东西先算,再一层层向外。
(2)先函数,后运算。
解释:式中有函数,例如sqrt(),fabs(),sin()之类,先算函数。
(3)先算术,后关系,再逻辑。
解释:逻辑表达式中,混有算术运算,要先算算术(加减乘除,函数)运算,再算关系(大小,等不等)运算。最后算逻辑(或与非),得到真假。
(4)先乘除,后加减。
解释:同算术一样,先做乘除,后做加减。
逻辑运算符“与”又叫逻辑乘,逻辑运算符“或”,又叫逻辑加,按先乘除,后加减,“与”比“或”优先。
(5)先左,后右
解释:同级运算,先做左边的,后做右边的。
(6)搞不清,加括号。
解释:自己写算术表达式和逻辑表达式时,搞不清运算符优先级,可以加括号,括号里的总是先。
C:一些容易错的优先级
D:++和—优先级
在传统C中,++、- -操作符和其他单目操作符具有相同的优先级。但在ANSI中,由于技术的原因,但++和- -作为后缀操作符时,结合性从左到右;当作为前缀的优先级,具有相同的优先级,结合性从右到左。
//测试优先级#include <stdio.h> int main( void ){ chararray[]= "abcde"; //定义一个字符数组array,并把"abcde"赋值给array char*p= &array[ 2 ]; //定义一个指针p,并指向数组array[2]的地址 char*q= &array[ 2 ]; //同上 char*t= &array[ 2 ]; //同上 char*s= &array[ 2 ]; //同上 //有上面定义可知。p,q,t,s指向的地址都相同,所以它们的值都为'c' printf("%c\n", *p++ ); // 输出的结果:c printf("%c\n", *( p++ ) ); // 输出的结果:d printf("%c\n", *( ++t ) ); // 输出的结果:d printf("%c\n", *++s ); // 输出的结果:d return 0;}
【指尖的微笑】错误在所难免,希望得到大家的指正^-^
转载时保留原文的链接http://oursharingclub.joinbbs.net和http://blog.csdn.net/mirrorsbeyourself
- C语言第五回合:运算符的优先级
- 【C语言的学习】第五回合:运算符的优先级大集合
- C语言运算符的“优先级口诀”
- C语言运算符的优先级表
- C语言运算符优先级的疑惑
- c语言中的运算符的优先级
- 【转】C语言运算符的优先级
- c语言运算符的优先级
- c语言中运算符的优先级
- c语言运算符的优先级问题
- c语言运算符的优先级
- C语言的运算符优先级
- c语言的运算符及其优先级
- C语言运算符的优先级
- C语言运算符的优先级
- C语言运算符的优先级
- C语言运算符的优先级问题
- C语言运算符的优先级
- 匹配优化--KM算法 详解+模板
- php foreach()
- 网络流 -- 流量平衡?
- Python itertools模块
- normalization rules prevent from reusing this data item in a primary identifier解决办法
- C语言第五回合:运算符的优先级
- [Docker]公有云容器服务进入2.0时代
- php break
- 有趣的重构
- mvc存储Cookie和读取Cookie方法
- Eclipse中非常好用几个快捷键
- 第五章 树和二叉树 思维导图
- wireshark过滤语法总结
- Floyd-Warshall算法