逻辑 && 和 || 如何运算符以及递增和递减工作?
How do logical && and || operators along with increment and decrement work?
计算下列表达式。在每种情况下查找 x,y,z
个值。假设最初 x=1
和 y=5
,您观察到什么:
z=++x && ++y;
z=--x && --y;
z=++x || ++y;
z=--x || --y;
逻辑运算符如何影响值?
我认为 "what do you observe" 非常明确,您应该 看到 一些东西。这几乎肯定意味着编写代码并检查会发生什么。
在任何情况下,逻辑运算符都将 0
视为假,其他任何情况都视为真。这些运算符的 output 为 0
为 false,1
为 true。
另外请记住,预递增和递减运算符会在 使用 之前更改值。
最后,请注意 &&
和 ||
是短路运算符,这意味着可能并不总是对第二个子表达式求值。例如:
int x = 1 ; int y = 5 ; int z = --x && --y;
将使 y
等于 5,因为 --x
是 zero/false 所以我们知道整个表达式将为假 - 无需计算第二个子表达式.
根据 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;
}
其输出为:
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
计算下列表达式。在每种情况下查找 x,y,z
个值。假设最初 x=1
和 y=5
,您观察到什么:
z=++x && ++y;
z=--x && --y;
z=++x || ++y;
z=--x || --y;
逻辑运算符如何影响值?
我认为 "what do you observe" 非常明确,您应该 看到 一些东西。这几乎肯定意味着编写代码并检查会发生什么。
在任何情况下,逻辑运算符都将 0
视为假,其他任何情况都视为真。这些运算符的 output 为 0
为 false,1
为 true。
另外请记住,预递增和递减运算符会在 使用 之前更改值。
最后,请注意 &&
和 ||
是短路运算符,这意味着可能并不总是对第二个子表达式求值。例如:
int x = 1 ; int y = 5 ; int z = --x && --y;
将使 y
等于 5,因为 --x
是 zero/false 所以我们知道整个表达式将为假 - 无需计算第二个子表达式.
根据 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;
}
其输出为:
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