红联Linux门户
Linux帮助

给看一下程序

发布时间:2011-10-17 12:22:25来源:红联作者:wmqj
[i=s] 本帖最后由 wmqj 于 2011-10-19 21:18 编辑 [/i]

请大给解释一下[code]++x||++y&&++z;[/code]这。 结果为什么是x1=1 y1=0 z1=0[code]#include
void main()
{
int x,y,z;
x=0;
y=0;
z=0;
++x||++y&&++z;
printf("x1=%d\ty1=%d\tz1=%d\n",x,y,z);

}[/code]
文章评论

共有 11 条评论

  1. 风落飘伤 于 2011-11-05 19:37:13发表:

    7382973989

  2. zx84123 于 2011-11-04 16:59:56发表:

    [b][/b]这题跟优先级没关系的 ++x||++y&&++z || 和&& 的优先级是相同的 ;
    由于x开始为0;经过++x之后为1 当 ||的前为真时 后面就不会做判断的了 所以 输出应该是 x1 = 1;
    y1 = 0; z1 = 0;

  3. chuangjinweilai 于 2011-11-04 14:41:58发表:

    额,以我的修为,目前还看不懂……

  4. 年年年 于 2011-10-19 17:28:14发表:

    好!

  5. 郭世展 于 2011-10-19 10:30:56发表:

    (6)m:b

  6. linux_zmx 于 2011-10-19 10:27:16发表:

    呵呵,,这道题目很容易做错。。不知道优先级的话。。

  7. linux_zmx 于 2011-10-19 10:27:00发表:

    呵呵,,这道题目很容易做错。。不知道优先级的话。。

  8. wonderall 于 2011-10-18 08:45:39发表:

    与和或运算只要前面成立就不会进行后面的运算了

  9. yanyongkg 于 2011-10-17 23:54:44发表:

    二楼解释得很详细

    表达式1 || 表达式2

    如果表达式1为真,则不会执行表达式2
    所以x自加后为1,y z均没有执行自加操作
    就这么简单!

  10. wmqj 于 2011-10-17 20:47:30发表:

    结果为什么是x1=1 y1=0 z1=0
    我还是不太清楚  为什么不是 x1=1 y1=1 z1=1 越通俗越好 谢谢2# malei1987

  11. malei1987 于 2011-10-17 14:28:39发表:

    ++x||++y&&++z;

    &&的优先级高于 ||,所以上面的式子等价于 ++x||(++y&&++z)

    1. 执行++x , 如果x为真,转到步骤4, 整个表达式的值为真,也就是1
    2. 执行++y,如果y为假,转到步骤4, 整个表达式的值为假,也就是0
    3. 执行++z, 整个表达式的值的真假取决于z。
    4. 结束。

    x=0;
    y=0;
    z=0;

    1. ++x, x的值为1 ,为真,转到步骤4, 结束; y,z的值不变。