x= - -a || b&& + +c; printf(“%d \n ” ,x ); 是什么意思?解释一下

main()
{int x , a=1, b=2, c=0 ;
x= - -a || b&& + +c;
printf(“%d \n ” ,x );
}
A 1 B 0 C -1 D 非零值

你首先要知道||和&&的用法,还有||,&&,--,++,=的优先级!其中--和++的优先级最高,故先计算这两个运算,--表示自减,a由1变为0,++表示自加,c由0变为1,再就是&&的优先级要高于||的优先级,故先计算&&,&&表示并的意思,只有当&&两端的数值都为非0时,那么作为整体,它会输出对应的逻辑1,像本题,b=2非0,c=1非0,所以b&&c=1.再就计算||,||表示或,当变量都只要有一个非0时,那么它作为一个整体输出逻辑的1,像本题,--a||(&&++c),括号里面的由前面已知为1了,所以尽管--a为0,当整体对应输出的还是1,所以x=1.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-17
变量x的值等于a自减1(a=a-1),判断运算后的a是否是非0的数,如果是的话,x=1,如果不是的话,再看b是否为非零的数,如果b非零的数,x仍然等于1,如果前面的--a与b都为0时,结果:x=0;追问

main()
{int x , a=1, b=2, c=0 ;
x= - -a || b&& + +c;
printf(“%d \n ” ,x );
}
A 1 B 0 C -1 D 非零值
我还是不大明白,这道题怎么做?

追答

这个就是上面讲的意思。其实算是一种判断然后在赋值的表达式吧。首先要x值只可能是0或者1中的一个,因为后面不是一般的加减乘除运算而是类似于判断的语句,就是通过先判断--a的值是不是为非零的值,因为后面的判断符号是||,就是说两个中一个是真的,这个--a||b的值就是1,不然但--a和b的值都为0时候,--a||b的值才为0,而对于整个句子而言,是从左到右判断的,所以当你算到--a||b是非零的数就不用看后面的东西了,顺便解释一下&&的意思就是中文的和的意思,就是要前后两个都成立的时候。这个语句才成立。。。。所以答案是A

追问

b&& + +c;不是一个整体是么,你看我说的对么,- -a是a-1=1-1=0 b=2,a,b都不是0所以答案是1
还是说,- -a是a-1=1-1=0 b&& + +c是b+(c+1)=2+1=3

相似回答