历史上的今天
今天是:2025年01月03日(星期五)
2018年01月03日 | C51程序设计中的运算符应用
2018-01-03 来源:eefocus
优先级排列:
1.优先级最高的:并不是真正意义上的运算符
()改变优先级的符号(括号)、GrouPINg operator
[] 数组下标操作符 Array aCCess
()函数调用操作符 function access
-> 结构成员选择操作符(我把它叫做“箭头”)member access from a pointer
. 点 member access from a object
2.单目运算符:优先级最高,结合性从右到左
!~(取反)logICal negation ,bitwise complement
++ --(自增自减)pre-increace ,pre-decrease
-(负号)+(正号) minus, plus
*(取指针)derefenrence &(取地址)
(type)(强制类型转换)sizeof(取占用内存大小)
3.算术运算符:
* / %(取模、求余)优先级高于 + -
multipication, division, modulus, addition, subtraction
4.按位运算符
<< >> 右移,左移 bitwise shift left/right
5.关系运算符
< <= > >= comparision less-than/ less-than-or-equal-to/ greater than/ greater-than-or-equal-to
优先级高于
== != comparision equal-to/ not-equal-to
6. 逻辑运算符:
按位逻辑运算符优先级高于其他逻辑运算符
每个逻辑运算符的优先级都不同:
& bitwise AND
^ bitwise exclusive OR
| bitwise inculsive(normal) OR
&& logical AND
| | logical OR
7. 三目运算符: 条件运算符Ternary conditional (if-then-else的简写)
?:结合性:从右向左
8. 赋值操作符 assignments及其复合运算符
= 结合性:从右向左
+= -= *= /= %= &= ^= |= <<= >>=
9. 优先级最低的:逗号运算符(顺序执行操作符 Sequential evaluation operator)
,
分割函数参数的逗号并非逗号运算符,声明里的变量列表之间的逗号也不是逗号运算符,只是起分割的作用。逗号运算符连接的是表达式。
需要注意的地方:
10. 使用括号能提高程序的易看性,降低程序的出错率。在不知道优先级的地方,尽量多使用括号。
11. 过多使用括号,是程序代码增加,简单和易用本就是一对矛盾。所以,尽可能多了解优先级知识。记忆规则是:
优先级最高的和优先级最低的要记牢;
单目运算符的优先级很高,仅次于部分符号。
算术运算符的优先级很高,但次于单目运算符;
移位运算符的优先级比算术运算符底,但是比关系运算符要高。
关系运算符中,==与!=优先级低于其他关系优先级;
所有的逻辑运算符的优先级都低于关系运算符。不同的逻辑运算符的优先级不同。
三目运算符的优先级很低,但是高于赋值运算符;
赋值操作符的优先级很低,仅高于逗号运算符。
12. 括号有时候带来的不一定是好事。比如g(x,y)与g((x,y)),函数参数的数量就是不同的。
13. 运算符的优先级与表达式的求值顺序
c语言只有四个运算符(&& || ?: ,)存在规定的求值顺序。
a && b 先对a求值,如果a为0(假),则继续对b求值;如果a为非0(真),则不对b求值;
a || b 先对a求值,如果a为0(假),则不对b求值;如果a为非0(真),则对b求值;
a ? b : c 先对a求值,根据a的值去求b或者c的值。也就是说b、c不同是被求值;
a,b 先对左侧操作数a求值,然后a的值被丢弃,最对右侧操作数b求值
上一篇:C程序中的缓冲输入设计
史海拾趣
|
所谓安全距离,就是为保护人在使用电子产品的时候,危险电压带电部分与人不能轻易接 触到,也不能让它来引起危险导致威胁人身安全。 因此必须在一般情况下,安全距离是在产品设计中最重要的部分之一。检查安全距离从设 计阶段开始。结构检查人员会 ...… 查看全部问答> |
|
图中,7805的输入1脚接12V外加电源,3脚输出5V电压,这个用万用表的电压档一测就知道了,但是它的输出电流最大是多少呢? 答案是输出电流随负载的变化而变化,可是电流不能无限小和无限大吧?所以输出电流必定有个最小值和最大值。 ...… 查看全部问答> |
|
我的VS2005怎么了?新建工程不行,打开工程不行(只限智能设备工程),报这样的错误"从用户数据存储中检索信息时出错。XML文档必须包含一个顶层元素".好怪! 我的VS2005怎么了?新建工程不行,打开工程不行(只限智能设备工程),报这样的错误\"从用户数据存储中检索信息时出错。XML文档必须包含一个顶层元素\".好怪!… 查看全部问答> |
|
VISTA系统下安装 Tornado2.0后,运行时总出现 gdb error,是什么原因? 运行Tornado时,总弹出好几个错误的对话框,标题为 gdb error! 内容为:Failed to register COM Server. Error code = ox8002801c 将对话框点掉之后 Tornado 就启动起来了,运行还算正常,但每次一启动就出 ...… 查看全部问答> |
|
要求做一个动画控件。功能描述如下: 根据调用者的要求,决定图片显示的快慢,以及多少张图片循环显示以实现动画功能,同时根据图片要能自我缩放以匹配控件大小。控件大小由调用者决定! 有没有谁写过啊?各位达人救救我啊… 查看全部问答> |
|
本报讯: 日前,记者从国内著名的IT培训公司北大青鸟APTECH获悉,进入9月份以来,在一些城市出现了大量刚入学大学新生前来咨询职业培训,甚至已有人报名参加相关课程培训,在某些培训中心,这类刚入学大学新生在本阶段招生中已占到相当比例。IT职业 ...… 查看全部问答> |
|
有谁做过TI的430以太网,就是easyweb那个解决方案,我的cs8900A始终不能初始化,在这个循环里跳不出来: do Write8900(ADD_PORT, PP_SelfST); // set register while (!(Read8900(DATA_PORT) & INIT_DONE)); // wait un ...… 查看全部问答> |
|
【MSP430共享】 MC430F224例程:Keys+LED演示 【例 程】://基于MC430F224开发板实验例程//软件:IAR Embedded Workbench Version: 3.42A//编写:微控设计网 www.Microcontrol.cn DC//目标板: MC430F224开发板 V1.0#include \"msp430x22x4.h\"//初级用户要习惯采用宏定义,以方便的编写 ...… 查看全部问答> |




