c语言中一道逻辑运算

来源:百度知道 编辑:UC知道 时间:2024/06/15 05:13:37
#include <stdio.h>
void main()
{
int a=9,x=3,d=1,c;
c=x<a||(d=3);
printf("%d,%d\n",d,c);
c=a>d&&(x=0);
printf("%d,%d\n",x,c);
}

结果
1,1
0,0

为什么输出的d是1(原值)而x是0(不是原值)?

赋值运算 是从左起 到右终止

x<a||(d=3) 是先运行 x<a 然后d=3 但是因为现在的编译器都有优化

(条件1||条件2)中 如果条件1是真 那么条件2就不执行 因为无论如何都返回真
(条件1&&条件2)中 如果条件1是假 那么条件2就不执行 因为无论如何都返回假

其他情况 均执行全部条件

因为x<a 是真 所以 d=3 不执行 所以是 1 1
因为a>d 是真 所以 x=0 需要继续执行 因此是 0 0

&& 和 || 在运算的时候遵循“逻辑短路”规则
a && b的话,只要a是假,那么整个表达式就为假,而不会执行到b
a || b的话,只要a是真,那么整个表达式就为真,而不会执行到b

c=x<a||(d=3);
因为x<a(3<9)是真,所以根据逻辑短路可知表达式值为真,就是1,所以(d=3)不会执行,直接将表达式的值1赋值给c