鱼C论坛

 找回密码
 立即注册
查看: 763|回复: 4

关系运算符

[复制链接]
发表于 2023-12-15 21:52:21 | 显示全部楼层 |阅读模式

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

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

x
21.        已知a='0', b=9, ch = 'a' 则表达式(a>=b && ch<'b' && b)的值是
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-15 21:52:36 | 显示全部楼层
表达式(a>=b && ch<'z') 的结果是False。

在这个表达式中,第一个关系运算符是>=,表示大于等于。由于a的值是'0',它的ASCII码值为48,而b的值是9,它的ASCII码值为57。所以a的值小于b的值,即a<b。因此,表达式a>=b的结果为False。

第二个关系运算符是<,表示小于。由于ch的值是'a',它的ASCII码值为97,而'z'的ASCII码值为122。所以ch的值小于'z',即ch<'z'的结果为True。

最后,使用逻辑运算符&&将两个关系表达式连接起来。&&表示逻辑与运算,只有当两个表达式都为True时,整个表达式的结果才为True。所以,False && True 的结果为False。

综上所述,表达式(a>=b && ch<'z') 的结果是False。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-19 12:28:35 | 显示全部楼层
AI 的有误,下面来解析一下。

原式 = (a>=b && ch<'b' && b)
= ('0' >= 9 && 'a' < 'b' && 9)  -> 把变量直接带入原式
= (48 >= 9 && 97 < 98 && 9) -> 字符转 ASCII 码
= (true && true && true) -> 48 >= 9 成立, 97 < 98 也成立,9 也成立
= true
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-12-19 13:55:00 | 显示全部楼层
本帖最后由 Husj0711 于 2023-12-19 13:57 编辑

先计算优先级大的,相同优先级看结合性。
显然,>=和<的优先级大于&&,故先计算a>=b和ch<'b';
a>=b,字符需转换成ASCII码来比较,'0'的ASCII是48,大于9,故返回1;
ch<'b',字符a的ASCII码是97,而字符b的ASCII码是98,正确,故返回1;
这样表达式变成了 1 && 1 && 9;
根据&&的结合性,从左到右,且碰到0立即停止。显然答案是1.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-19 16:51:02 | 显示全部楼层
本帖最后由 xiaotubie 于 2023-12-19 16:54 编辑

根据C语言规范的定义  '0'和'a'本身就是int类型,不是所谓的char类型,当你写a='0', b=9, ch = 'a' ,根据ASCII表的编码,相当于写了a=48,b=9,ch=97  而'b' 其实是98

所以则表达式(a>=b && ch<'b' && b)求值  其实就是(48>=9 && 97<98 && 9)
C语言的真假 用的是1和0,不是true和false

48>=9 这个表达式是真的 所以该表达式的值是1
97<98这个表达式是真的 所以该表达式的值是1
这样表达式变成了 (1 && 1 && 9)
&&是逻辑与运算符,X&&y 如果X、Y的值都不是0,那么X&&y整个表达式的值是1,否则值是0
所以从左往右开始  1&&1 两边都不是0 因此结果是1  再用得到结果1继续运算1&&9 两边又不是0 所以结果也是1,因此整个表达式的值就是1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-7-9 05:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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