原创 条件运算符和条件表达式

2010-10-26 10:35 2469 5 6 分类: MCU/ 嵌入式
P1=P1_6?(((LedState&0xf0)>>2)|0xc1)((LedState&0xf0)>>2)|0x01);

条件运算符和条件表达式
C 语言中还有一个特殊的三目条件运算符“?:”。由这个运算符构成的表达式为条件表达式。条件表达式的格式为:
e?e1:e2
其中,e、e1、e2 代表表达式。
条件表达式的求值法则是:首先求解 e 的值,若 e 值为真(非 0),则取 e1 的值作为
条件表达式的值;若 e 值为假(0),则取 e2 的值作为条件表达式的值
例如,代数函数
1 ( x≥0 )
y =
-1 ( x<0 )
可用赋值表达式描述如下:
y=(x>=0)?1:-1
上式中赋值号右边的是条件表达式。
又例如,若 a、b 的初值分别为 2 和 5,则条件表达式
a>b?a++:++b;
的值为++b,即先自加,后引用,值为 6,而表达式 a++不被求解,故执行后 a 不变,仍为
2,而 b 变为 6。


有a=1,b=2这时我们要求是取ab两数中的较小的值放入min变量中,也许你会这样写:
if (a<b)
min = a;
else
min = b; //这一段的意思是当a<b时min的值为a的值,否则为b的值。


用条件运算符去构成条件表达式就变得简单明了了:
min = (a<b)?a : b
  很明显它的结果和含意都和上面的一段程序是一样的,但是代码却比上一段程序少很多,编译的效率也相对要高,但有着和复合赋值表达式一样的缺点就是可读性相对效差。在实际应用时根据自己要习惯使用,就我自己来说我喜欢使用较为好读的方式和加上适当的注解,这样可以有助于程序的调试和编写,也便于日后的修改读写。

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

cz81_503897891 2010-10-26 10:32

大家看完顶啊,留点言,哪里不合适我改改,别看完就跑
相关推荐阅读
cz81_503897891 2011-11-21 17:13
博客备份--查找
大家好:     各位朋友现在博客如何备份?如何指定关键词进行查找?     以前的版本可以,现在新版以来我一直找这个功能,找不到. 谢谢...
cz81_503897891 2011-11-01 11:20
查看Keil MDK-ARM各种数据类型占用的字节数
  笔者正在学习uCOS-II,移植到ARM时考虑到数据类型的定义,但对于Keil MDK编译器的数据类型定义还是很模糊,主要就是区分不了short int、i...
cz81_503897891 2011-10-28 16:44
理解指针函数 区别:*(pfun(int, int))与 (*pfun)(int, int)
1.int *(pfun(int, int)):一个返回值为整型指针的函数 2.int (*pfun)(int, int):是一个指向返回值为int的函数的指针 3.#define  IAP_ENT...
cz81_503897891 2011-10-20 15:49
各种接口与管脚 232,VGA、USB、DVI、PS/2 RJ45网线、HDMI 的接口引脚定义
232,VGA、USB、DVI、PS/2 RJ45网线、HDMI 的接口引脚定义 学习 2010-06-07 20:20:15 阅读82 评论0 字号:大中小 经常看到网络上很多人要各种电脑接口引...
cz81_503897891 2011-10-20 11:50
ARM 中断编程入门 寄存器介绍及编写过程
最近一直在和ARM2200打交道,总结了下在ARM zlg模版中如和编写中断的方法(涉及了向量中断,非向量中断和外部中断的编写方法) 本人初学,以下为本人观点,若有错误,请与我联系交流 一.   ...
cz81_503897891 2011-10-18 17:17
LPC2478 向量中断控制器(VIC)
简介:         VIC是处于芯片外设和ARM内核之间的一个模块,对芯片所有外设中断进行管理,决定哪些中断源可以产生中断、产生哪种类型的中断以及中断后执行哪段服务程序。  ARM处理器内核具...
EE直播间
更多
我要评论
1
5
关闭 站长推荐上一条 /3 下一条