main() { int a=4,b=5,c=0,d; d=!a&&!b||!c; printf("%d\n",d); }

我想问一下为什么这个程序执行新的结果是1而不是0?

&&的优先级高于 || 的优先级,所以先计算&&再计算||
而!c的值为1,所以最后d为1。追问

不是,我是说“&&”的左边的运算对象的值为0,就不再对右边的“||”进行运算了,而直接得出整个表达式的值为0?

追答

你说的那种情况在下面的表达式中才成立: d= !a&&(!b||!c), 这样当看到!a为0 了, 就不在计算右边的 ||运算。而在表达式 !a&&!b ||!c, &&表达式是||表达式的一个子表达式,及相当于(!a && !b) || !c, 所以在看到!a=0的时候,就不用在计算! b了。 但是,!a&&!b 的计算结果才只是 ||的左边操作数的值为0, 还需要计算右边的!c的值 为1, 故最终结果是1.

温馨提示:内容为网友见解,仅供参考
第1个回答  2020-05-07
&&和||是逻辑运算符,属于平级运算,运算优先次序为从左到右,❗a和❗b都是0,所以是0,所以0||❗c,❗c是1,所以最终结果是1
第2个回答  2011-12-05
不要太死的去记,这种都是看优先级的。你说的““&&”的左边的运算对象的值为0,则不再对右边的运算对象进行运算而直接得出整个表达式的值为0吗?”,这只针对于逻辑运算符全是&&的情况
第3个回答  2011-12-05
d=!a && !b || !c
=0 && 0 || 1
=0 || 1
=1追问

不是说“&&”的左边的运算对象的值为0,则不再对右边的运算对象进行运算而直接得出整个表达式的值为0吗?

第4个回答  2011-12-05
1L正解。
非运算符优先于逻辑与、逻辑或

...main() { int a=4,b=5,c=0,d; d=a&&!b||!c; printf("%d\\n",d...
include <stdio.h>int main() { int a=4,b=5,c=0,d; d=a&&!b||!c; printf("%d\\n",d); return 0;}\/\/选A,输出1

main() { int a=4,b=5,c=0,d; d=!a&&!b||!c; printf("%d\\n",d); }...
而!c的值为1,所以最后d为1。

...main() { int a=4,b=5,c=0,d; d=!a&&!b||!c; printf("%d\\n",d...
输出内容为1 d=!a&&!b||!c; 由于c=0 所以!c为真,或者说是整形值为1 而逻辑或运算只要有一个1那么运算结果为1 所以d为1 输出内容为1

...main() {inta=4,b=5,c=0,d; d=!a&&!b||!c; printf("%d\\n",d...
1,因为&&优先级高于||,先算!a&&!b为0,再算0||!c为1,则d为1

main(){ int a=5,b=4,c=3,d=2; if(a>b>c) printf(“%d
C语言中不能用 a > b > c 这样的表达式来判断a, b, c 之间的大小。正确的表达式应为: if (a > b && b > c)具体可以找一本C语言基础的书籍看看

C语言 若 int a=4,b=5,c=6,d=7,m=1,n=1,e; 则执行语句 e=(m=a>b...
(m=a>b)&&(n=c>d)当执行完m=a>b之后,返回的值是0,也就是false,就不去执行&&后面的表达式,只有m的值发生了改变n的值不变,所以是m=0.n=1。代码:include "stdio.h"void main(){ int a=5,b=4,c=6,d;d=a>b?(a>c?a:c):b;printf("d的值为%d",d);} ...

C语言中if语句的运用
main(){ inta=3,b=4,c=5,t=99; ...1 if(b<a&&a<c) t=a;a=c;c=t; ...2 if(a<c&&b<c) t=b;b=a;a=t; ...3 printf("%d%d%d\\n",a,b,c); ...4 } 第1句:新建4个变量并分别赋初值;第2句:如果b小于a并且a小于c则执行t=a这条语句。由于b大于a这个条件,故...

void main() {int a=3,b=4,c=5,t=99; if(a<c&&b<c)t=b;b=a;a=t; p...
如果a<c且b<c,则将b的值赋值给t,将a的值赋值给b,将t(已经是4)的值赋值给a,最后结果是输出abc,运行结果是4 3 5

设有变量说明:int a=4,b=5,c=6;分别编写程序求出下列表达式的值并输出运...
void a4(int a,int b, int c){ int ans=(b=a+b, a=b-a, b=b-a , a+b+c);printf("%d %d %d %d\\n",ans,a,b,c);} int main() { int a=4,b=5,c=6;a1(a,b,c);a2(a,b,c);a3(a,b,c);a4(a,b,c);return 0;} ```结果 另外,第一个表达式里面应该是b=...

{ int a=3,b=4,c=5,t=99; if (b<a&&a<c) t=a;a=c;c=t; if (a<c&&b<...
if (a<c&&b<c) t=a;b=a;a=t;这里赋值错误 你是想把它交换 所以应该是 if (a<c&&b<c) t=a;a=b;b=t;你之前的 相当于 把 a赋予b 然后,a还是a

相似回答