登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[学习笔记] 另类的逻辑运算(欢迎回帖纠正)

[复制链接]
发表于 2017-2-1 19:54:51 | 显示全部楼层 |阅读模式
学习笔记
学习科目: C语言
学习安排: 看书查资料
开始时间: 2017-02-01
结束时间:
   首先还是把基本的逻辑运算符介绍一下:&&(与运算符),||(或运算符),!(非运算符)
                                            逻辑运算的真值表
a b!a!b a&&b a||b
非0 非0 00 1 1
非0 0 0 1 01
0 非0 1 0 01
00 1 1 0 0
  特别是非运算符作为表达式出现在while,if,switch语句中时,如下例 QQ截图20170201185330.jpg
上式中只要a!=0,那么!a==0恒成立,则跳出while语句。
上面的内容是都应该掌握的,而下面的才是重点
   对于&&和||逻辑运算符,如果根据左边的运算对象能判断表达式的结果,则右边的运算对象不被执行。
     如 1.  exp1&&exp2:  只有exp1为真时,才计算exp2。
         2,exp1||exp2:只有exp1为假时,才计算exp2。
看下面例子:
QQ截图20170201192259.jpg
这个题和其他题有所不同,并不将逻辑表达式放在其他语句中判断。
   从结合性看 与运算符&&和非运算符||具有左结合性,非运算符具有右结合性。
       只要||左边的为真,右边的就不需要执行了
QQ截图20170201190741.jpg
这个很奇怪  (与运算符的优先级高于或运算符,按理说应该是1,2,2  只能是编译的问题,
QQ截图20170201193332.jpg QQ截图20170201194333.jpg
QQ截图20170201194509.jpg QQ截图20170201194634.jpg
这些都是会遇到的陷阱(特别是第二张)只能认为是系统编译的结果
      当然有大神会的话欢迎回帖。谢谢!!!

...
发表于 2017-2-1 22:53:09 | 显示全部楼层
本帖最后由 夜色星空 于 2017-2-2 10:42 编辑
a++与++a不一样
该会员没有填写今日想说内容.
发表于 2017-2-1 22:54:01 | 显示全部楼层
本帖最后由 夜色星空 于 2017-2-2 10:42 编辑
第二张问题就是a加前为0
该会员没有填写今日想说内容.
发表于 2017-2-1 22:58:06 | 显示全部楼层
本帖最后由 夜色星空 于 2017-2-2 10:41 编辑
你可以看一下你的开头图片,a--有效果没。
该会员没有填写今日想说内容.
 楼主| 发表于 2017-2-1 23:13:27 | 显示全部楼层
夜色星空 发表于 2017-2-1 22:54
第二张问题就是a加前为0

什么意思?没明白
...
发表于 2017-2-2 10:24:46 | 显示全部楼层
本帖最后由 夜色星空 于 2017-2-2 10:41 编辑
追猫少年 发表于 2017-2-1 23:13
什么意思?没明白

a+前为零则左半部分&&为假b++就不执行,而此时机器就会验证或的后半部分也就是c++,也就是说,只有a,c进行了++运算,而我说的a++和++a区别就在于一个是加前取值,一个是加后取值,最顶上的图就是最好的例子,它打印出来的不是4而是5,是a--前的值,同理,第二张图&&的是a=0而不是a=1。
该会员没有填写今日想说内容.
 楼主| 发表于 2017-2-2 14:18:11 | 显示全部楼层
夜色星空 发表于 2017-2-2 10:24
本帖最后由 夜色星空 于 2017-2-2 10:41 编辑

a+前为零则左半部分&&为假b++就不执行,而此时机器就会验 ...

明白了,谢啦!
...
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表