首页 > 解决方案 > 逻辑&&和||怎么做 算子随着增量和减量工作?

问题描述

评估以下表达式。在每种情况下查找x,y,z值。假设x=1y=5最初,你观察到什么:

  1. z=++x && ++y;
  2. z=--x && --y;
  3. z=++x || ++y;
  4. z=--x || --y;

逻辑运算符如何影响值?

标签: clogical-operatorspre-increment

解决方案


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

在任何情况下,逻辑运算符都将0其视为 false,将其他任何内容视为 true。这些运算符的输出0为假和1真。

还要记住,预增量和减量运算符会在使用更改值。

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

int x = 1 ; int y = 5 ; int z = --x && --y;

y等于 5,因为--x是零/假,所以我们知道整个表达式将为假 - 无需评估第二个子表达式。

x根据您对and的先决条件,这应该足以弄清楚结果是什么y


作为提示,让我们看看第一个。++x并且++y2分别6为真。因此true && true将给出真,以 结束1


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

#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;
}

它的输出是:

oldx = 1, oldy= 5, newx= 2, newy = 6, z = 1
oldx = 1, oldy= 5, newx= 0, newy = 5, z = 0
oldx = 1, oldy= 5, newx= 2, newy = 5, z = 1
oldx = 1, oldy= 5, newx= 0, newy = 4, z = 1

推荐阅读