日期: 2016年6月13日
环境: Xcode 7.3.1
描述:
int num_1 = -1;
int num_2 = -1;
//我们期望num_1得到的值是0,却得得到1
num_1 = (1 || 0) && 0;
//我们期望num_2得到的值是1,却得得到0
num_2 = (0 && 1) || 1;
if(!num_1){
printf("num_1=0\n");
}
if(num_2){
printf("num_2=1\n");
}
逻辑与:一真为真,即为真
当逻辑与操作多个表达式时,第一个操作数为真时,整个表达式都为真,编译器将不再执行操作符之后的语句;
以上代码中,编译器永远不执行:
if(!num_1){
printf("num_1=0\n");
}
因为第一个操作数为真,编译器直接跳过逻辑或操作符之后的语句。逻辑或:一假为假,即为假
当逻辑或操作多个表达式时,第一个操作数为假时,整个表达式都为假,编译器将不再执行操作符之后的语句;
以上代码中,编译器永远不执行:
if(num_2){
printf("num_2=1\n");
}
因为第一个操作数为假,编译器直接跳过逻辑与操作符之后的语句。
本文通过两个具体的示例深入解析了C语言中的逻辑运算符“&&”和“||”的行为特性,尤其是它们在短路求值方面的表现。揭示了逻辑运算如何影响变量赋值,并解释了为何实际结果可能与预期不符。
2279

被折叠的 条评论
为什么被折叠?



