c语言 !5&(7+3)&&(4+5) 和 x=x||y&&z 求解..!

!5&(7+3)&&(4+5) 等于零,怎么算??
int x=1,z=0,y;
y=sizeof(--x);
x=x||y&&z;
答案是x等于1.。
写错,是 !5&&(7+3)&&(4+5)
百度有人说是5*10*9=450 所以!450等于零。。。
我觉得是因为5,10,9都不为零,所以结果是零

!5&&(7+3)&&(4+5)//非0参与逻辑与运算取反后就是0。没什么好解释的。

追问

恩,谢谢,那第二个怎么算呢

追答y=sizeof(--x); // 首先x是int型,占四个字节,sizeof是测试数据类型的长度(这里测出为4个字节) y=4,x由1变0(--运算了)
x=x||y&&z;// 由左往右:0||4&&0,由于逻辑与运算符高过逻辑或运算符,所以先4&&0结果为0,然后再轮到0||4,结果为真,所以x=1
// 注意:不管何数参与逻辑运算比较的结果就只有两样,要么为真即True(值为1),要么为假即false(值为0)。

追问

第二题,轮到或运算时为什么不是0||0啊??(y&&z为零)
不是x||(y&&z)?

追答

x=x||y&&z; // 它只是先执行逻辑与运算(但是,你要注意它并没有改变任何的值),所以然后再执行逻辑或运算,所以最终值为1,此时编译系统认为它的逻辑比较执行完毕,要执行赋值运算(=)所以才把1给赋值给x。
如果你非得想得到它们比较的值,我会这样做:x=x||(y&&z)?y&&z:y&&z;
或者:x=x||(y&&z)?y:z;

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-01-05
!的优先级大于与运算 所以先算!5=0, &&运算方向为自左至右,0&&10为0,下面表达式不运算了
&&的优先级高于||,所以表达式先执行与运算 在执行或运算 因为x为1 所以表达式为真追问

--x后x还是1而不是零吗?

追答

晕 不好意思看错了 是后面的是值是1 ,x是0.

第2个回答  2014-01-05
第一个:!5&(7+3)&&(4+5)
优先级:()>!>&>&&
所以先执行()运算符,即!5&(10)&&(9)
然后执行!运算符,即0&(10)&&(9),
进一步进行按位运算符&,即0&&(9)//注(0&1=0)
最后进行&&运算符,即0;
所以!5&(7+3)&&(4+5)=0.
第二个:
y=sizeof(--x),这个等于4;
x=x||y&&z;优先级:&&>||
所以先进行&&运算符,即x||0,
然后进行||运算符,即1.
所以X=1;
有点纰漏,欢迎追问,在线答。追问

为什么--x后x还是1而不是零啊?

追答

由上图可知,它只是在编译过程中就搞定了,而并没有执行,所以x的值不变,这是一个障眼法,呵呵,差点被你问倒了,欢迎再次追哦!!!在线。

c语言 !5&(7+3)&&(4+5) 和 x=x||y&&z 求解..!
!5&&(7+3)&&(4+5)\/\/非0参与逻辑与运算取反后就是0。没什么好解释的。

C语言++x&&--y&&z++怎么理解?
先将x的值自增1,如果x的新值为0,说明++x返回false,不再执行后续语句(后面y和z的值都不会变),整个表达式也返回false;如果x的新值不为0,继续执行--y,先将y的值自减1,如果y的新值为0,说明--y返回false,不再执行后续语句(后面z的值不会变),整个表达式也返回false;如果y的新值...

用C语言编写一个简单的打字母游戏,给出基本思路及完整程序。
outtextxy(20,260,“按键 1 2 3 4 5 6 7 8 9”); while (!kbhit()) \/\/kihit()作用是判断是否有字幕输入 { setcolor(RGB(c,255,0)); setfont (80,0,"楷体"); outtextxy(140,130,"请选择等级"); setcolor(RGB(c,0,255)); setfont(100,0,"Wickenden Cafe NDP"); outtextxy(100,135,"Le...

C语言中 main() {int x=1,y=1,z=0; if(z<0) if(y>0 具体请看下边程序...
x=3;\/\/\/此语句为第三句同上属于上一句的if语句 由于上个语句不成立所以x = 3没有执行, else\/\/此语句为第四句 由于 第一句不成立,所以跳转到这句 x=5;\/\/此语句为第五句 x = 5,现在x变量的值是5 printf("%d\\t",x);\/\/此语句为第六句 printf 输出的是 5 if(z=y<0) x=3; else if(y==...

连续正整数的和 C语言 不知道如何处理这个细节
if(s==x),后面的{}中n++的后面加一句 break;

C语言提供3种逻辑运算符,按优先级高低它们分别是
C语言提供三种逻辑运算符,按优先级高低它们分别是:逻辑非(!),逻辑与(&&)、逻辑或(||)。运算规则:&&:当且仅当两个运算量的值都为“真”时,运算结果为“真”,否则为“假”。|| :当且仅当两个运算量的值都为“假”时,运算结果为“"假”,否则为“真”。! :当运算量的值为“真”...

C语言基础知识
在c语言中,逗号除了作为分隔符,还可以用作一种运算符---逗号运算符,用逗号运算符将几个表达式连接起来,例如a=b+c,a=b*c等称为逗号表达式。 一般形式为: 表达式1 ,表达式2 ,表达式3 ,…,表达式n 例:x=2,y=3,z=4 逗号表达式具有从左至右的结合性,即先求解表达式1,然后依次求解表达式2,直到表达式n的...

c语言问题???
c=a-b+7;d=b*c;a=b+c+d;b=-a;'Vtablea,2,6b,2,19c,2,0d,2,0of Vtable'Vupdate1,6;2,193,04,03,655304,-1141,-1012,101of Vupdateof Practicevoid main(){long x,y;int a,b,c,d;x=5;y=6;a=7;b=8;c=x+a;d=y+b;printf("c=x+a=%d,d=y+b=%d\\n",c,d);}...

求解:c语言 7&&3+12的值为什么不是15
这个应该是考优先级,不过就算不考虑优先级也不等于15 比如 (7 && 3)+12 = 13 你说的15是不是以为(7&&3)=3 ? 如果是(7&3)+12=15 我上面都加了括号 因为+ -比 &&和&运算符优先级高 所以 先算3+12=15 然后7 && 15=1 C里面 (x>0) && (y>0) =1 ...

简单的c语言运算
((x+y)>z)&&(y==z)&&X||y+z&&y+z (1)&&(0)&&1||1&&1 按原理来算,在计算机中,当表达式已经为零了,后面的是不会再继续判断的 所以,表达式在执行y==z时,后面就不需要执行,整个表达式已经是零,无论后面的表达式是多少个1,0与或非运算都还是零。但是,按照运算的优先级,去把...

相似回答