C语言逻辑运算的短路特性
来源:互联网 发布:linux创建新目录命令 编辑:程序博客网 时间:2024/04/19 18:55
原理:(表达式1)&&(表达式2) 如果表达式1为假,则表达式2不会进行运算,即表达式2“被短路”(表达式1)||(表达式2) 如果表达式1为真,则表达式2不会进行运算,即表达式2“被短路”
举例:
1、x=y=z=0;
c=++x||++y&&++z;
printf("x=%d,y=%d,z=%d",x,y,z);
结果:x=1,y=0,z=0
解释:由于第一个是“或”运算符,当++z为1时,它具有短路特性,屏蔽掉后面的运算符。
2、x=y=z=0;
c=(++x||++y)&&++z;
printf("x=%d,y=%d,z=%d",x,y,z);
结果:x=1,y=0,z=1
解释:由于在c的左边的逻辑表达式中的第一项含有“()”,所以(++x||++y)作为一个整体——作为一个数,所以先算括号里面的,然后由于“&&”的运算符的特性,再算++z,而对于括号里的再由于“||”的短路特性,只算了“++x”,由于它为“1”,所以“++y”就被屏蔽了。
3、x=y=0
c=x&&++y||++z;
结果:c=1,x=0,y=0,z=1
解释:注意逻辑运算符的运算顺序是自左向右,所以对于左边第一个“&&”运算符,首先算出它的逻辑值,再和后面的“||”运算,作为c的结果。根据优先级的顺序和“&&”的短路特性,由于开始x=0,则整个“&&”的逻辑表达式的逻辑值就是0,而且++y也被屏蔽掉了,再由于后面的“||”的特性,根据++z,可知c=1,z=1。
4、x=y=z=0;
c=x||++y&&z;
结果:c=0,x=0,y=1,z=0
解释:如果“||”前为“ 1”,则整个表达式即c=1;若“||”
前为“0”时,那么根据“||”的特性,该表达式的值由后面的逻辑值确定。对于后面的逻辑表达式,根据“&&”的特性,由于++y=1而z=0,可知c=0,y=1。
5、x=y=z=0;
c=x||++y&&++z;
结果:c=1,x=0,y=1,z=1
解释:结合上一题可知,由于x=0,则该表达式的值由后面的表达式确定,根据“&&”的特性,由于“++y”的值为“ 1”,则继续再算“&&”后面的“++z”,由于“++z”的值也为“1”,所以c=1,y=1,z=1。
6、x=y=z=0;
c=x&&++y&&++z;
结果:c=0,x=0,y=0,z=0
解释:首先根据运算符的优先级,运算从左至右,对于第一个“&&”,由于x=0,则这个逻辑运算符的逻辑值为“0”,且屏蔽了后面的“++y”。再于逻辑运算符的逻辑值为“0”且后面为“&&”,根据它的短路特性后面的“++z”被屏蔽了。所以整个表达式的值即c=0,x=0,y=0,z=0。
最后,总结一下关于类似c=++x&&++y||++z这类任何形式的逻辑表达试,均相当于c=(++x&&++y)||++z,但同时要结合其“&&”、和“||”不同的短路特性以及其内部的短路特性,可以正确地算出其逻辑值。
0 0
- C语言逻辑运算的短路特性
- C语言逻辑运算短路
- 逻辑运算符的短路特性
- 逻辑运算符的短路特性
- C语言中逻辑运算符的短路效应
- 关于java逻辑运算符的短路特性
- java逻辑运算上的短路特性
- PHP中逻辑运算符的短路特性
- JAVA逻辑运算符的“短路特性”
- 逻辑运算符的短路特性 求1+2+3+...+n
- c语言中的逻辑运算符都是短路运算符
- C语言逻辑运算短路(与运算、或运算)
- 逻辑运算的短路现象
- 逻辑运算的短路问题
- 逻辑运算的短路特征
- 程序设计中的 短路特性(逻辑运算而已)
- C语言中逻辑运算符的陷阱
- 关于C语言逻辑运算符的应用
- Android项目源码质量检测
- android 实现后台服务及源码下载
- Java并发编程之volatile变量
- oracle归档日志的操作
- vi编辑器常用命令
- C语言逻辑运算的短路特性
- C可变参数
- java多线程中的join()、 sleep()、 yield()、 wait()函数
- 嵌套类
- 关于静态与非静态之详细总结
- 厄密多项式
- Android-->网络图片下载的三级缓存策略
- 猜字母
- 黑马程序员——java基础学习笔记——第三天