鱼C论坛

 找回密码
 立即注册
查看: 3903|回复: 7

[已解决]第004讲课后练习题,Python的 and 操作符 和C语言的 && 操作符 有何不同?

[复制链接]
发表于 2018-9-8 15:47:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
>>> 1 and 3                #两边都为真,为什么返回的是3,而不是1或者True?C语言里又为什么返回的是1?这里的逻辑是什么?不是很懂
3
>>> 0 and 1
0
>>>

最佳答案
2018-9-8 15:56:26
逻辑运算,一样呀。在【非零为真】的世界里,1 不会比 2 来得真,所以没有必要返回 1 或 True。当然可以返回 True,但还不够灵活。【and】被重载了,因为有短路逻辑,所以回最后一个为【真】或【假】的元素。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-8 15:56:26 | 显示全部楼层    本楼为最佳答案   
逻辑运算,一样呀。在【非零为真】的世界里,1 不会比 2 来得真,所以没有必要返回 1 或 True。当然可以返回 True,但还不够灵活。【and】被重载了,因为有短路逻辑,所以回最后一个为【真】或【假】的元素。

点评

注意,这个不是【位元逻辑】  发表于 2018-9-8 15:57
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-8 16:22:45 | 显示全部楼层
claws0n 发表于 2018-9-8 15:56
逻辑运算,一样呀。在【非零为真】的世界里,1 不会比 2 来得真,所以没有必要返回 1 或 True。当然可以返 ...

照你的逻辑,1不会比2来的真,那 3 and 1   返回的又怎么是 1 而不是3 呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-9-8 16:48:46 From FishC Mobile | 显示全部楼层
bluewind119 发表于 2018-9-8 16:22
照你的逻辑,1不会比2来的真,那 3 and 1   返回的又怎么是 1 而不是3 呢?

and 的短路是前面为假,所以要判断第二个
or 的短路是前面为真
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-8 17:40:58 | 显示全部楼层
自己解:

Python 中的and从左到右计算表达式,若所有值均为真,则返回最后一个值(即最右边的值),若存在假,返回第一个假值。
>>> 1 and 2 and 3
3
>>> 1 and '' and 0
''
>>> 1 and 2 and 0
0

or也是从左到有计算表达式,返回第一个为真的值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-12-25 16:18:06 | 显示全部楼层
  1. #include<stdio.h>
  2. int main()
  3. {

  4.         printf("%d, %d\n",3 && 1, 0 && 1);
  5. }
复制代码

这里C语言中为啥第一个输出的是1,而不是3?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-28 14:43:41 | 显示全部楼层
1. 在纯and语句中,如果每一个表达式都不是假的话,那么返回最后一个,因为需要一直匹配直到最后一个。如果有一个是假,那么返回假
2. 在纯or语句中,只要有一个表达式不是假的话,那么就返回这个表达式的值。只有所有都是假,才返回假
3. 在or和and语句比较难表达,总而言之,碰到and就往后匹配,碰到or如果or左边的为真,那么就返回or左边的那个值,如果or左边为假,继续匹配or右边的参数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-20 16:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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