gpt4 book ai didi

c - 本例中 C 语言逻辑表达式的短路行为

转载 作者:太空狗 更新时间:2023-10-29 14:54:53 28 4
gpt4 key购买 nike

程序

#include <stdio.h>

int main(void)
{
int i, j, k;

i = 1; j = 1; k = 1;

printf("%d ", ++i || ++j && ++k);
printf("%d %d %d", i, j, k);

return 0;
}

结果

1 2 1 1

我期待 1 1 2 2。为什么?因为 && 优先于 ||。所以我遵循了以下步骤:1) j 加 1,所以 j 现在值 2... 2) k 加 1,所以 k 现在值 2... 3) 2 && 2, 计算结果为 1... 4) 作为 || 的右操作数不需要进一步求值为真,因此由于逻辑表达式的短路行为,整个表达式必须为真...

为什么我错了?

最佳答案

优先级只影响分组。 && 的优先级高于 || 表示:

++i || ++j && ++k

相当于:

++i || (++j && ++k)

但这并不意味着首先评估 ++j &&++k。还是从左到右求值,根据||的短路规则,++i为真,所以++j &&++k 永远不会被评估。

关于c - 本例中 C 语言逻辑表达式的短路行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28145152/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com