C语言关系运算与逻辑运算笔记(条件判断必用) 一、关系运算符比较大小就是数学里的比较大于、小于、等于这些。注意 是判断相等一个等号 是赋值初学者经常写错。cif(x5)// 这不是判断x等于5而是把5赋给x然后条件为真因为5非0编译器一般会警告自己得小心。关系运算的结果是整数真1假0但逻辑判断时任何非0都算真。二、逻辑运算符组合条件用来连接多个条件或者取反例子cintage20,score85;if(age18score60){printf(成年且及格\n);}if(age18||score60){printf(未成年或不及格\n);}if(!(score60)){printf(不及格\n);// 等价于 score 60}三、短路求值重要 和 || 会“偷懒”对于 a b如果 a 是假b 就不算了因为整个必假。对于 a || b如果 a 是真b 就不算了因为整个必真。利用短路可以写出安全代码cif(ptr!NULLptr-data10)// 先判空避免崩陷阱如果第二个表达式有副作用比如函数调用、赋值短路可能导致它不执行容易出bug。cinti0;if(ii)// i只执行了一次因为左边i是0假右边就不执行了// 结果 i 1所以别在逻辑表达式里搞复杂的赋值、自增容易乱。四、运算符优先级记个大概就行! 关系运算符 ||关系运算符里 高于 !括号 () 最高不放心就加括号不丢人。例子if (a b c d || e f) 实际等价于 ((a b) (c d)) || (e f)但没人愿意记老老实实加括号 if ((a b) (c d) || (e f))虽然括号不是都必须但读起来舒服。五、常见用法和坑判断是否在区间错误写法if (10 x 20)C语言会先算10 x得0或1再拿这个0或1去和20比较永远为真因为0或1都20。正确写法if (x 10 x 20)判断浮点数相等浮点数直接 可能坑因为精度问题。一般用差值小于某个阈值cif(fabs(a-b)1e-6)逻辑非 ! 的用法! 把非0变00变1。常用于检查为0的情况cif(!ptr)// 等价于 if (ptr NULL)if(!flag)// flag0时进入用逻辑运算简化标志位cintready1,error0;if(ready!error){// 干活}小心 和 || 的混合不加括号容易误解cif(ab||cd)// 实际是 (ab) || (cd)如果意图是 a (b||c) d必须括号。六、一些小技巧改用 || 设置默认值int x y || 5; 不常用因为结果为0或1。更常见int x (y ! 0) ? y : 5; 或者用 if。利用短路避免除零if(b!0a/b10)判断奇数if (n % 2) 或 if (n 1)位运算更直接但也是真/假。判断字符是否是字母if((cacz)||(cAcZ))七、最后废话关系运算和逻辑运算的结果是 int 类型的0或1可以直接赋值给变量int b (a 3);在while、if、for括号里任何非0都视为真0视为假。宁可多写括号也不要省那几行代码是给人看的。好了笔记就这些。多写几个if条件多试几次短路慢慢就熟了。