davidmou 发表于 2023-12-15 21:52:21

关系运算符

21.        已知a='0', b=9, ch = 'a' 则表达式(a>=b && ch<'b' && b)的值是

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。

zhangjinxuan 发表于 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

Husj0711 发表于 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.

xiaotubie 发表于 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
页: [1]
查看完整版本: 关系运算符