首页 > 解决方案 > 逻辑运算符 | | 在 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

问题:

输出

1
8, 9, 9

标签: c

解决方案


从C标准(强调我的):

不像按位 | 运算符,|| 运算符保证从左到右的评估;如果计算第二个操作数,则在第一个和第二个操作数的计算之间存在一个序列点。如果第一个操作数比较不等于 0,则不计算第二个操作数。

上述行为通常称为操作员短路。

在您的示例中,由于(i = j)不为零,因此不会评估第二个操作数。


推荐阅读