2025年c语言深度剖析(15)—逻辑运算符分析

c语言深度剖析(15)—逻辑运算符分析1 有趣问题 逻辑运算符 amp amp 和 真的很简单吗 include stdio h int main int i 0 int j 0 int k 0 等价于 true amp amp i stdio h

大家好,我是讯享网,很高兴认识大家。

1. 有趣问题

  • 逻辑运算符&&,||真的很简单吗
#include <stdio.h> int main() { int i = 0; int j = 0; int k = 0; // 等价于(true && ++i) ||(++j && ++k)可见整个表达式为或运算,从左向右进行 // 或运算,先计算或左边的(true && ++i)结果为true,根据“或”的短路规则,不再 // 进行右边的(++j && ++k)。 ++i || ++j && ++k; printf("%d\n", i); // i为1 printf("%d\n", j); // 0 printf("%d\n", k); / 0 return 0; }

讯享网

2. 程序中的短路

  • ||左向右开始计算
    • 当遇到为的条件时停止运算,整个表达式为
    • 所有条件为假时表达式才为假
  • &&左向右开始计算
    • 当遇到为的条件时停止运算,整个表达式为
    • 所有条件为真时表达式才为真

3. 逻辑表达式中,&&比||具有更高的优先级


讯享网

  • 在&&和||混合运算时,整个表达式被看作||表达式,编译器从左向右开始计算&&表达式,当某个&&表达式的值为真时,停止计算,整个表达式的值为真。

4.编程实验

  • 程序中的短路规则
讯享网#include <stdio.h> #include <stdlib.h> int g = 0; int f() { printf("In f()...\n"); return g++; } int main() { // 等价(true && g) || (f() && f()) // 或的左边为false,继续计算右边的(f() && ()) // 所以先输出f中的printf语句,由于第1个f返加0 // 而或右边的表达式是“与”运算,所以短路,即右 // 则表达式返回false,整个表达式为false。下列的 // if语句中的printf不被执行。 if (g || f() && f()) { printf("In if statement: %d\n", g); } printf("In main(): %d\n", g); system("pause"); return 0; } //输出结果 // In f()... // In main(): 1

5. “!”究竟是神马

  • 逻辑非运算符的使用
#include <stdio.h> int main() { printf("%d\n", !0); // 1 printf("%d\n", !1); // 0 printf("%d\n", !100); // 0 printf("%d\n", !-1000); // 0 return 0; }
  • C语言中的逻辑非“!”只认得0,只知道见了0就返回1。当碰见其它值时,返回0。

6. 小结

  • 程序中的逻辑表达式遵循短路规则
  • 在&&与||混合运算时
    • 整个表达式被看作||表达式;
    • 从左向右计算&&表达式;
    • 最后计算||表达式
  • 逻辑非!运算符只认得0。碰见0返回1,否则统统返回0。(只有0才表示假,其余均为真
小讯
上一篇 2025-04-05 12:42
下一篇 2025-04-07 19:16

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/60912.html