鱼C论坛

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

关系运算符

[复制链接]
发表于 2022-11-28 17:19:07 | 显示全部楼层 |阅读模式

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

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

x
x = 7 || 6 > 7 && 3+4

请问这个怎么表述
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-11-28 18:06:35 | 显示全部楼层
本帖最后由 jackz007 于 2022-11-28 18:08 编辑

      && 运算符优先级高于 || 所以,这个表达式可以写为:
x = 7 || (6 > 7 && 3 + 4)
      这个表达式是两个子表达式通过逻辑或(||)连接,根据短路逻辑,需要按照从左到右的顺序测试左、右两个子表达式的值,如果左值为 false,表达式的值由右值决定,需要继续测试右值;如果左值为 true,则无需测试右值,即可确定表达式的值为 true。
      【x = 7】: 表达式 x = 7 的值为 7,逻辑值为 true,所以,无需继续测试,可以确定整个表达式的值为 true。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-28 20:54:17 | 显示全部楼层
本帖最后由 zwj.123 于 2022-11-28 20:59 编辑

依次判断,是为1,不是为0,首先,如果是x=7,1||0为1,接着1&&3就为1,然后1+4=5;
如果x!=7,就是0||0==0,0&&3==0,0+4=4;
这样应该对吧,我感觉不大对,刚我敲了一下发现无论怎样结果都是1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-28 20:56:29 | 显示全部楼层
zwj.123 发表于 2022-11-28 20:54
依次判断,是为1,不是为0,首先,如果是x=7,1||0为1,接着1&&3就为1,然后1+4=5;
如果x!=7,就是0||0==0 ...

矮油,第一个x=7是赋值符号
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-29 11:47:50 | 显示全部楼层
x = 7 || 6 > 7 && 3+4
因为 && 的优先级大于 || 的优先级,所以可以这样写:
x = 7 || (6 > 7 && 3+4)
不过编译器还是会先算 x = 7, x = 7 虽然是一个赋值语句,但是有返回值的,他赋值为什么就返回什么

比如声明了一个 double 类型的 s,printf("%g", s = 3.141) 则会打印 3.141

所以, x = 7 返回 7,但前提是 x 被声明过,且为数字类型

表达式就变成了:
7 || (6 > 7 && 3+4)
现在来算 7,不过在编译期眼里,只要不是零,转为布尔类型就都是真,不管你是 -1,还是 "Hello", 所以,|| 的左边就是真

但是,根据短路求值的原理,后面的就无需计算,你想一想,逻辑与 的运算规则是什么?只要有一个是真,那么全部都是真,现在我们已经算出来左边是真了,那么右边不管是什么整个表达式都为真,是吧

所以,整个表达式的作用就是:
1. 将 x 的值赋值为 7;
2. 返回真,也就是 1。


可以给一个最佳吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-29 17:37:22 | 显示全部楼层
x = 7 || 6 > 7 && 3+4 
1. “=”单一个这个是赋值运算符,可最后在看
2. 算数运算符的优先级要高于比较运算符和逻辑运算符,所以先计算算数运算符6>7, 为false, 为0, 就变成了x = 7 || 0 && (3+4)
3. 从左到右计算逻辑运算符: 7||0 为7, 7&&7为真,为1
4,故,最后x = 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-29 17:39:00 | 显示全部楼层
zwj.123 发表于 2022-11-28 20:54
依次判断,是为1,不是为0,首先,如果是x=7,1||0为1,接着1&&3就为1,然后1+4=5;
如果x!=7,就是0||0==0 ...

那个是“=”,而不是“==”,不能这么用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-29 22:10:09 | 显示全部楼层
x= (7 !=0)  或 (6>7和3+4 != 0都成立)中至少成立一个
这个表达式的值是 1(true)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-20 18:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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