一道C语言.......

来源:百度知道 编辑:UC知道 时间:2024/06/04 07:44:39
#include <stdio.h>
{
int x,y,z;
x=1;y=1;z=0;
x=x||y&&z;
printf ("%d,%d",x,x&&!y||z);
}
结果为1,0 为什么x的值最后为1? x=x||y&&z中,x最后被赋予的值为多少?

逻辑的顺序是与或非,x||y&&z-----x||(y&&z)=1

x||(y&&z) 是逻辑或 先判断x或者(y&&z)是否有为真的(就是1),其中有一个

为真就返回1赋值给x,都为假就返回0,因为x初试值为1所以x=1.

x && ((!y)||z)是逻辑与 因为!y为0 z为0 所以((!y)||z)为0,因为是逻辑

与有一个为假就为假,所以x && ((!y)||z) 为0

|| && ! 是逻辑运算符,它们返回的是0,1,
x=x||y&&z 是赋值语句,=优先级最低,||次之,&&优先级最高,
所以整个过程是 先y&&z,然后(其结果)||x,因为x=1,所以这个式子肯定是1,然后再把1赋给x

&&的优先级比||的优先级高, 所以x=x||y&&z;的顺序是先y&&z然后结果和x或, 所以x的值为1
!的优先级又比&&高,所以x&&!y||z等价于(x&&(!y))||z, 所以是0

逻辑判断符号有! || &&逻辑判断结果有两种真和假
其中在定义时真为非0假为0输出时真就是1假是0
优先级的高低!>&&>||此题
int x,y,z;
x=1;y=1;z=0;
x=x||y&&z;
printf ("%d,%d",x,x&&!y||z);
先计算y&&z=1&&0=0;再计算x||y&&z=x||0=1;结果x=1;
x&&!y||z=(x&&(!y))||z=(x&&0)||y=0||y=0;
所以最后输出1,0

#include <stdio.h>
{
int x,y,z;
x=1;y=1;z=0;
x=x||y&&z; //|| && 中&&优先级较高,||较低,在有||中,如果第一个值为真,不管后面的值为多少(其他的运算符要比||优先级高),其值都为真
printf ("%d,%d",x,x&&!y||z); //&& ! || 中!优先级最高,&&其次,|