c - 逻辑运算符 | | 在 C 中
问题描述
我正在努力理解以下代码的行为:
#include <stdio.h>
int main(void)
{
int i;
int j;
int k;
i = 7;
j = 8;
k = 9;
printf("%d\n", (i = j) || (j = k));
printf("%d, %d, %d\n", i, j, k);
return (0);
}
输出:
1
8, 8, 9
问题:
我明白expr1 | | 如果expr1或expr2(或两者)具有非零值,则expr2的值为1 。
i
增加 from7
to的值是8
因为j
's 的值被分配给,i
但同样的方式为什么 the 的值j
没有增加,即使j = k?
我期待一个
输出
1
8, 9, 9
解决方案
从C标准(强调我的):
不像按位 | 运算符,|| 运算符保证从左到右的评估;如果计算第二个操作数,则在第一个和第二个操作数的计算之间存在一个序列点。如果第一个操作数比较不等于 0,则不计算第二个操作数。
上述行为通常称为操作员短路。
在您的示例中,由于(i = j)
不为零,因此不会评估第二个操作数。
推荐阅读
- python-2.7 - 如何在 python2.7 的 oneDrive 中推送/添加空白工作簿(工作表)
- python - 卡住试图找出我的嵌套循环的问题
- git - 初始合并后无法将新提交合并到另一个仓库
- python - 在 Python 中创建对象时,有没有办法在不链接实际变量的情况下分配变量的值?
- python-3.x - API数据检索脚本慢,建议加快速度
- asp.net - 当服务器应用程序在 docker 上运行时,SignalR 客户端无法连接到集线器
- react-native - 如何使用本机反应每 x 秒监控或更新用户位置?
- ios - 将 UIView 渲染为 UIImage 时出现图像大小错误
- spring-data-jpa - 春季JPA中的@Transactional
- python - 如何在散点图(plotly python)上保留重复值?