gpt4 book ai didi

c - 为什么 c 在输出中没有递增?

转载 作者:太空狗 更新时间:2023-10-29 17:27:19 24 4
gpt4 key购买 nike

我正在研究 C 的基础知识,并试图解决下面的问题,谁能解释为什么变量 c 的输出不同?

下面程序的输出是什么?

int main()
{
int a = -3, b = 2, c= 0, d;
d = ++a && ++b || ++c;
printf ("a = %d, b = %d, c = %d, d = %d", a, b, c, d);
}

答案:-2、3、0、1

为什么 c 在输出中没有递增?

最佳答案

变量c不会递增,因为 || 的 RHS(右侧)除非 LHS 评估为 false,并且 LHS 评估为 true,否则不会执行。 C ||&&运营商是“短路”运营商;它们不会评估第二个操作数,除非第一个操作数不足以确定表达式的整体真实性。

&&结合比 || 更紧密, 因此该操作可以用括号括起来:

d = (++a && ++b) || ++c;

++a 的值是 -2,计算结果为真(因为任何非 0 的值都计算为真); ++b 的值为 3,计算结果为真;所以 && 的值术语是正确的。因为true || falsetrue || true两者都评估为 true , 无需评估 RHS 即可了解整体结果。 (&& 的类似规则是,如果第一项的计算结果为假,则无需计算第二项,因为整个表达式必须为假。如果测试前有 a = -1;,则 b 不会递增,因为 ++a 将为零或假,因此 && 的 RHS 未计算。当然,c 将递增,因为 || 的 LHS 为假,而 RHS 将必须进行评估以确定总体结果。)

关于c - 为什么 c 在输出中没有递增?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9398731/

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