Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 逻辑&&;和| |运算符以及递增和递减工作?_C_Logical Operators_Pre Increment - Fatal编程技术网

C 逻辑&&;和| |运算符以及递增和递减工作?

C 逻辑&&;和| |运算符以及递增和递减工作?,c,logical-operators,pre-increment,C,Logical Operators,Pre Increment,计算以下表达式。在每种情况下查找x、y、z值。假设最初x=1和y=5,您观察到了什么: z=++x&&++y z=--x&&--y z=++x | |++y z=--x | |--y 逻辑运算符是如何影响这些值的?我认为“你观察到了什么”非常明确,因为你应该看到一些东西。这几乎肯定意味着编写代码并检查发生了什么 在任何情况下,逻辑运算符都将0视为false,其他任何操作都视为true。对于false,这些运算符的输出为0,对于true,这些运算符的输出为1 还要记住,预递增和-递减运算符在使用前

计算以下表达式。在每种情况下查找
x、y、z
值。假设最初
x=1
y=5
,您观察到了什么:

  • z=++x&&++y
  • z=--x&&--y
  • z=++x | |++y
  • z=--x | |--y
  • 逻辑运算符是如何影响这些值的?

    我认为“你观察到了什么”非常明确,因为你应该看到一些东西。这几乎肯定意味着编写代码并检查发生了什么

    在任何情况下,逻辑运算符都将
    0
    视为false,其他任何操作都视为true。对于false,这些运算符的输出为
    0
    ,对于true,这些运算符的输出为
    1

    还要记住,预递增和-递减运算符在使用前会更改值

    最后,请注意,
    &&
    | |
    是短路运算符,这意味着第二个子表达式可能并不总是被计算。例如:

    int x = 1 ; int y = 5 ; int z = --x && --y;
    
    将使
    y
    等于5,因为
    --x
    为零/假,所以我们知道整个表达式将为假-无需计算第二个子表达式

    根据
    x
    y
    的先决条件,这应该足以计算出结果


    作为提示,让我们看看第一个<代码>++x
    ++y
    将分别为
    2
    6
    ,因此两者都为真。因此
    true&&true
    将给出true,结果为
    1


    现在,由于您已经编写了一些代码(根据您的评论,您认为在某些情况下,
    --
    ++
    运算符的奇怪行为是什么),下面是我的示例代码,它显示了操作:

    #include <stdio.h>
    
    int main() {
        int x, y, z;
    
        x = 1; y = 5; printf("oldx = %d, oldy= %d", x, y);
        z=++x && ++y;
        printf(", newx= %d, newy = %d, z = %d\n", x, y, z);
    
        x = 1; y = 5; printf("oldx = %d, oldy= %d", x, y);
        z=--x && --y;
        printf(", newx= %d, newy = %d, z = %d\n", x, y, z);
    
        x = 1; y = 5; printf("oldx = %d, oldy= %d", x, y);
        z=++x || ++y;
        printf(", newx= %d, newy = %d, z = %d\n", x, y, z);
    
        x = 1; y = 5; printf("oldx = %d, oldy= %d", x, y);
        z=--x || --y;
        printf(", newx= %d, newy = %d, z = %d\n", x, y, z);
    
       return 0;
    }
    
    我相信“你观察到了什么”是非常明确的,因为你应该看到一些东西。这几乎肯定意味着编写代码并检查发生了什么

    在任何情况下,逻辑运算符都将
    0
    视为false,其他任何操作都视为true。对于false,这些运算符的输出为
    0
    ,对于true,这些运算符的输出为
    1

    还要记住,预递增和-递减运算符在使用前会更改值

    最后,请注意,
    &&
    | |
    是短路运算符,这意味着第二个子表达式可能并不总是被计算。例如:

    int x = 1 ; int y = 5 ; int z = --x && --y;
    
    将使
    y
    等于5,因为
    --x
    为零/假,所以我们知道整个表达式将为假-无需计算第二个子表达式

    根据
    x
    y
    的先决条件,这应该足以计算出结果


    作为提示,让我们看看第一个<代码>++x
    ++y
    将分别为
    2
    6
    ,因此两者都为真。因此
    true&&true
    将给出true,结果为
    1


    现在,由于您已经编写了一些代码(根据您的评论,您认为在某些情况下,
    --
    ++
    运算符的奇怪行为是什么),下面是我的示例代码,它显示了操作:

    #include <stdio.h>
    
    int main() {
        int x, y, z;
    
        x = 1; y = 5; printf("oldx = %d, oldy= %d", x, y);
        z=++x && ++y;
        printf(", newx= %d, newy = %d, z = %d\n", x, y, z);
    
        x = 1; y = 5; printf("oldx = %d, oldy= %d", x, y);
        z=--x && --y;
        printf(", newx= %d, newy = %d, z = %d\n", x, y, z);
    
        x = 1; y = 5; printf("oldx = %d, oldy= %d", x, y);
        z=++x || ++y;
        printf(", newx= %d, newy = %d, z = %d\n", x, y, z);
    
        x = 1; y = 5; printf("oldx = %d, oldy= %d", x, y);
        z=--x || --y;
        printf(", newx= %d, newy = %d, z = %d\n", x, y, z);
    
       return 0;
    }
    

    好的,我在控制台上得到了正确的三种情况,但在执行第二种情况时,输出是d=0、x=0和y=5,那么为什么y不递减(预递减)?@Mayank,
    &&
    运算符短路。换句话说,如果第一个子表达式为false(它是false,因为当x为1时,
    --x
    为零),则它根本不计算第二个子表达式。没有必要,因为
    false&&ANYTHING
    false
    。项目3也是如此。我已经更新了答案。谢谢你的解释。我明白了。好的,我在控制台上得到了正确的三种情况,但在执行第二种情况时,输出是d=0、x=0和y=5,那么为什么y不递减(预递减)?@Mayank,
    &&
    运算符短路。换句话说,如果第一个子表达式为false(它是false,因为当x为1时,
    --x
    为零),则它根本不计算第二个子表达式。没有必要,因为
    false&&ANYTHING
    false
    。项目3也是如此。我已经更新了答案。谢谢你的解释。我得到了它。