gpt4 book ai didi

c - 无法理解 C 编程中的逻辑表达式

转载 作者:行者123 更新时间:2023-11-30 18:27:21 25 4
gpt4 key购买 nike

我正在自学 C,并按照一本没有答案的书练习。我无法理解为什么下面的表达式在编译器中运行时计算结果为“true”或“1”。我了解优先级、关联性以及逻辑运算符的工作原理,但 a += 让我困惑。我不知道这与真与假有什么关系。我感谢任何有关如何评估其真实性的帮助或解释。

 int a = 1, b = 2, c = 3;

a += !b && c == ! 5;

最佳答案

a += !b && c == ! 5

解析为

a += ((!b) && (c == (! 5)))

我们可以依次计算每个子表达式:

  • b2
  • !b0(因为 ! 将所有非零值转换为零,并将零转换为一)。
  • 0 && ... 不会计算其右侧,而是立即返回 0
  • a += 0 相当于 a = a + 0,它不会改变 a 的值,而是返回其值新值(在本例中与旧值相同),1
  • 1 不为零,因此为真。

如果这就是让你困惑的地方:赋值运算符就是运算符。它们有效果(为变量赋值),但它们也有结果。对于所有赋值运算符,结果都是被赋值的值:

int n = 2;
printf("%d\n", n += 3);

输出 5 并将 n 设置为 5

为了完整起见,c == (!5) 的计算结果如下:

  • !50
  • c == 00 (因为 c3 并且 == 返回 1(表示 true)和 0(表示 false)。

关于c - 无法理解 C 编程中的逻辑表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57088037/

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