初级 C 问题 来看看 啊 250 高分

来源:百度知道 编辑:UC知道 时间:2024/06/18 04:18:40
#include<stdio.h>
void main()
{
int a,b,c;

printf("a=%d,b=%d,c=%d,(a=0)||(b=1)&&(c=0)=%d\n",a,b,c,(a=0)||(b=1)&&(c=0));
}
我想知道 (a=0)||(b=1)&&(c=0) 是计算机怎么运算的
是把(a=0)||(b=1)看成一部分 还是
(b=1)&&(c=0)
就现在来看 a 值为0 判断后面 b值为1 是把(a=0)||(b=1)这个表达试的值1
和后面的 &&结合么
如果a=1的话 就所谓的短路问题(a=1)||(b=0)&&(c=0) 不管后面是什么都算做一个整体了 挺糊涂的 请 高人解答
给点权威的说法》》
说好加 在加 150啊
说到做到
到底 有没有 优先级别这一说
如果有a=1)||(b=0)&&(c=0)执行后 b是个负数c是负数 说明 根本没往后 判断啊
高老板 说的 那短路条件 算不算 优先级 只要有
逻辑运算符的地 短路条件不是 最高么

(a=0)||(b=1)&&(c=0)

用到的知识或原理:

a=0 b=1 c=0这3部分,是赋值,不是判断。
c语言中,赋值用等号(=),判断是否相等用两个等号(==)。

||和&&是逻辑运算符号,它们具有短路性质
比如,a||b,如果a为1,a||b肯定为1,则不再对b进行判断
同样的道理,a&&b,如果a为0,a&&b肯定为0,就不再对b进行判断

另外,&&的优先级高于||,上面式子相当于(a=0)||((b=1)&&(c=0))

该算式的执行过程:

a=0,还不能确定整个式子的值,即不满足短路条件
然后执行b=1,也不满足短路条件,还要继续执行c=0

a,b,c的赋值都执行后,也就变成0||(1&&0)了,其值为0

所以,整个算式的结果是0

够详细,够明白了吧?

我从汇编代码来跟你分析一下.
汇编每一指别都是计算机中的一步.
int c;
int d;
int e;
if ((c = 4) == 5||(d = 5) == 5&&(e = 6) == 6)
这个是编译器经过汇编后的代码.
004113DC mov dword ptr [c],4
004113E3 cmp dword ptr [c],5
004113E7 je wmain+91h (411441h)
004113E9 mov byte ptr [ebp-0F5h],1
004113F0 mov dword ptr [d],5
004113F7 cmp byte ptr [ebp-0F5h],0
004113FE jne wmain+5Dh (41140Dh)
00411400 push offset (4114C8h)
00411405