目录

  • 引入
  • 逻辑运算符和逻辑表达式
  • 例子
  • 注意事项(短路特性)

引入

首先,我们思考一个问题:

if (fabs(data2) <= 1e - 7)

是否等同于下面这个语句:

if (-1e - 7 <= data2 <= 1e - 7)

众所周知,数学上的表达式a > b > c是“a大于b并且b大于c”的意思。但是,在C语言中,a > b > c这种表达式虽然没错,但在逻辑上面却并不能表达“a大于b并且b大于c”的意思。
在C语言中,用1表示表达式的值为真,用0表示表达式的值为假,并且关系运算符具有左结合性,因此,若假设a,b,c的值分别为3,2,1,那么a > b > c的计算过程则为:a > b > c <=> (a > b) > c = 1 > c = 0(假)。所以说,**在数学上正确的表达式在C语言的逻辑上不一定总是正确的。**因此,上面的两个语句并不等价。

逻辑运算符和逻辑表达式

1、逻辑运算符
C语言中的逻辑运算也称为布尔运算,C语言提供的逻辑运算符如下:

逻辑运算符 类型 含义 优先级 结合性
单目运算符 逻辑非 最高 从右向左
&& 双目运算符 逻辑与 较高 从左向右
II 双目运算符 逻辑或 较低 从左向右

注意:
这三个逻辑运算符的优先级各不相同。其中,运算符!只需要一个操作数,所以叫单目运算符,也叫一元运算符,因为一元运算符的优先级比其他运算符高,所以表中!的优先级最高,其次是&&,再次是II。

2、逻辑表达式
用逻辑运算符连接操作数组成的表达式称为逻辑表达式。逻辑表达式的值,即逻辑运算的结果值同样只有真和假两个值,C语言规定用1表示为真,用0表示假。但是在需要判断一个数值表达式(不一定是逻辑表达式)真假的时候,**由于任意一个数值表达式的值不只局限于0和1两种情况,因此根据表达式的值为非0还是0来判断其真假。若果表达式的值为非0,则表示为真,如果表达式的值为0,则表示为假。只是大多时候用1和0表示真假。**逻辑运算规则如下:

A的取值 B的取值 !A(逻辑非) A && B(逻辑与) A II B(逻辑或)
非0 非0 0 1 1
非0 0 0 0 1
0 非0 1 0 1
0 0 1 0 0

运算法则:

1、逻辑与运算的特点是:仅当两个操作数都为真的时候,运算结果才为真;只要有一个为假,运算结果就为假。简记(一假则假,否则为真)
因此,当要表示两个条件必须同时成立,即“…,并且…”这样的条件时,可使用逻辑与运算符来连接这两个条件。
2、逻辑或运算的特点是:两个操作数中只有一个为真,运算结果为真;仅当两个操作数都为假,运算结果才为假。简记(一真则真,否则为假)
因此,当需要表达“或者…或者…”这样的条件时,可使用逻辑或运算符来连接这两个条件。
3、逻辑非运算的特点:若操作数的值为真,则其逻辑非运算的结果为假;反之,则为真。简记(若真则假,若假则真)
了解完这些逻辑运算符和表达式后,我们再来看上面说过的数学表达式a > b > c,那么用C语言就应该表示为:

(a > b) && (b > c)

同理,下面两条语句也是等价的:

if (fabs(data2) <= 1e - 7) if (data2 >= -1e - 7 && data2 <= 1e - 7)

例子

下面再举个常见的例子
判断某一年year是否是闰年?
那么需要满足以下两个条件:
(1)能被4整除,但不能被100整除
(2)能被400整除
用代码实现即:

((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)/*带括号的写法*/
year % 4 == 0 && year % 100 != 0 || year % 400 == 0/*无括号写法*/

以上两种写法是等价的,但第二种需要明确各种运算符的优先级才能正确对其进行计算,而前者加上括号后计算的先后顺序一目了然,即使忘记了各种运算符的优先级,也能对其正确计算。
之所以如此,是因为在C语言中,圆括号也是一种运算符,而且它的优先级永远是最高的。因此,如果表达式中的运算符较多,则宜用圆括号来确定表达式的计算顺序,这样可以避免使用默认的优先级。

注意事项(短路特性)

运算符&&和||都具有“短路”特性。也就是说,若含有逻辑运算符(&&和||)的表达式的值可由先计算的做操作数的值单独推导出出来,那么将不再计算有操作数的值,这意味着表达式中的某些操作数可能不会被计算。
例如,在逻辑表达式a > 1 && b++ > 2中,仅当前面的表达式a > 1为真时,后面表达式b++ > 2中的b++才会被计算。反之,若改成b++ > 2 && a > 1,则b++ 就一定会被计算了。当然,更好的办法是单独对b进行自增计算。
因此,为了保证运算的正确性,提高程序的可读性,良好的程序设计风格不建议在程序使用多用途、复杂而晦涩难懂的复合表达式。

以上就为大家总结了C语言的逻辑运算符和逻辑表达式,最后的注意事项一定要记住噢,还得下去多练,多操作就会很快记住啦!如果大家在读完这篇博客后有所帮助,请给我点个赞关注一下吧!谢谢大家了。如果有什么问题,可以在下方评论,或者加我QQ:1423759736,我会及时回复的!

逻辑运算符和逻辑表达式详解相关推荐

  1. Linux Shell 逻辑运算符、逻辑表达式详解

    2019独角兽企业重金招聘Python工程师标准>>> shell的逻辑运算符 涉及有以下几种类型,因此只要适当选择,可以解决我们很多复杂的判断,达到事半功倍效果. 一.逻辑运算符 ...

  2. 逻辑表达式是否合法_Linux shell 逻辑运算符、逻辑表达式详解

    转自 | talkwithtrend 作者 | db2haodb shell的逻辑运算符 涉及有以下几种类型,因此只要适当选择,可以解决我们很多复杂的判断,达到事半功倍效果. 一.逻辑运算符 1.逻辑 ...

  3. 逻辑运算符及其优先级,C语言逻辑运算符及其优先级详解

    C 语言提供了以下三种逻辑运算符. 一元:!(逻辑非). 二元:&&(逻辑与).||(逻辑或). 以上三种逻辑运算符中,逻辑非 ! 的优先级最高,逻辑与 && 次之,逻 ...

  4. Java中的运算符——逻辑运算符详解

    逻辑运算符主要包括逻辑与( & ),逻辑或( | ),逻辑异或( ^ ),短路与( && ),短路或( || ).所有逻辑运算符的特点是操作数都是布尔类型,并且最终的运算结果也 ...

  5. JAVA逻辑运算符示例详解:与、或、非、异或

    JAVA逻辑运算符示例详解:与.或.非.异或 对比表 与 逻辑与 短路与 或 逻辑或 短路或 非 逻辑非 异或 逻辑异或 对比表 与(仅左右语句都为真时为真)包括:逻辑与& 和 短路与& ...

  6. linux之find命令详解

    find命令是用来在给定的目录下查找符合给定条件的文件 find命令格式: find   path  -option  [ -print | -ls  | -delete | -fls /PATH/T ...

  7. python流程控制语句-python学习 流程控制语句详解

    ###################### 分支语句 python3.5 ################ #代码的缩进格式很重要 建议4个空格来控制 #根据逻辑值(True,Flase)判断程序的 ...

  8. EL表达式 JSTL(详解)

    相关JSTL.EL博客收集如下: JSTL 标签大全详解:http://blog.csdn.net/qq_25827845/article/details/53311722 EL表达式详解:http: ...

  9. java json path_Java使用JSONPath解析JSON完整内容详解

    JsonPath是一种简单的方法来提取给定JSON文档的部分内容. JsonPath有许多编程语言,如Javascript,Python和PHP,Java. JsonPath提供的json解析非常强大 ...

最新文章

  1. 用机器学习神器sklearn做特征工程!
  2. STL priority_queue sort 自定义比较终极模板
  3. boost::fusion::make_map用法的测试程序
  4. python基础(part1)--注释/变量/del语句
  5. 【整理】fiddler不能监听 localhost和 127.0.0.1的问题
  6. pb 数据窗口 *号隐藏_王者荣耀背后的腾讯自研数据库TcaplusDB实践
  7. Qt QCompleter自动补全
  8. 模拟器xposed框架安装7.1-64教程
  9. rows between unbounded preceding and current row等,unbounded ,preceding ,following,current row含义详解
  10. 一、mysql数据库基本框架
  11. MySQL数据库的核心MVCC详解
  12. 北京化工大学数据结构2022/10/27作业 题解
  13. python:scipy.optimize.minimize(method=’Nelder-Mead’)
  14. W: Possible missing firmware /lib/firmware/i915/kbl_guc_ver9_14.bin for module i915
  15. 文件服务器建立,文件服务器建立
  16. Zero-sho原先的升级版:hourglass网络:U-Net
  17. Analog Noise
  18. 餐饮酒店的存酒卡怎么使用,开发一款存酒卡的微信小程序,var d = new Date(“2021-03-12“);
  19. CAS、AtomicInteger、synchronized原理
  20. 单播 、多播(组播)、广播

热门文章

  1. 解决app一打开白屏和黑屏的问题
  2. eggjs 创建应用知识点
  3. Bison教你3分钟集成支付宝好友分享
  4. 关于 Chrome插件安装时程序包无效:CRX_HEADER_INVALID 的解决方法
  5. python搜题手机软件_智慧职教APPPython程序设计(深圳信息职业技术学院)答案搜题公众号...
  6. 百度地图坐标转换为gps_百度地图与中交兴路合作,为大卡司机提供专业导航服务...
  7. 关于周华健,我觉得有那么几个时期:-转
  8. 什么是物理路径、相对路径、绝对路径、根目录------java初学者学习笔记
  9. 从事Java开发主要就业方向有哪些?
  10. 视觉无人机高速公路违章检测——分析要点,整体框图