c - 逻辑&&和||怎么做 算子随着增量和减量工作?
问题描述
评估以下表达式。在每种情况下查找x,y,z
值。假设x=1
和y=5
最初,你观察到什么:
z=++x && ++y;
z=--x && --y;
z=++x || ++y;
z=--x || --y;
逻辑运算符如何影响值?
解决方案
我相信“你观察到了什么”是非常明确的,因为你应该看到一些东西。这几乎可以肯定意味着编写代码并检查会发生什么。
在任何情况下,逻辑运算符都将0
其视为 false,将其他任何内容视为 true。这些运算符的输出0
为假和1
真。
还要记住,预增量和减量运算符会在使用前更改值。
最后,请注意&&
and||
是短路运算符,这意味着可能并不总是评估第二个子表达式。例如:
int x = 1 ; int y = 5 ; int z = --x && --y;
将y
等于 5,因为--x
是零/假,所以我们知道整个表达式将为假 - 无需评估第二个子表达式。
x
根据您对and的先决条件,这应该足以弄清楚结果是什么y
。
作为提示,让我们看看第一个。++x
并且++y
将2
分别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
推荐阅读
- c# - 如何验证用户是否在 c# 的 datagridview 单元格中输入整数?
- r - R中子集的交叉表
- android - GcmNetworkManager.getInstance(Context context) 返回 null
- java - Android kotlin Object Any 类型不匹配
- wordpress - 从缓存中排除文件夹
- python - 试图在 python 中简化另一个 if-else 阶梯
- vert.x - vertx-jdbc-client3.5.2 postgresql:sql更新原因“预期没有结果时返回了结果”
- reactjs - 如何从 React Native 中的数组中获取单选按钮的标签?
- python - 在 MongoDB 文档中明智地写入数据列
- javascript - 通过索引(数组)创建新的 jQuery 对象