C++ 代码中对表达式 ('Z' - 'A') < ('z' - 'A') 的结果输出为 0。( )
答案B。不同类型混合运算时发生隐式类型转换,向更高精度提升。bool→int→long→float→double。
注意:关系表达式(3==0)结果为bool(false=0)。bool可转为int参与算术运算。
【考点】字符 ASCII 码计算|运算符比较逻辑|布尔值整数转换
🎯 考纲定位 本题考查《GESP 二级 C++ 大纲》"字符与数据类型"模块中"字符 ASCII 码数值计算"与"比较运算结果类型"的交叉考点。命题人专挑 ASCII 码大小陷阱,卡住大量考生对字符常量运算的直观误解。二级大纲明确要求掌握字符常量的运算优先级和比较结果类型,此题正是对这两点的综合检验,尤其针对考生容易忽略布尔值在输出时的整数表示。同时,字符常量的运算优先级高于比较运算符,考生常忽略这一点,导致错误判断。
🧠 解题思维 先计算两个子表达式:'Z'-'A'=25,'z'-'A'=57。再比较 25<57,结果为 true。C++ 中布尔值在输出时,true 转为整数 1,false 转为 0。因此表达式整体输出应为 1,题目断言为 0 显然错误。
🪤 陷阱拆解 命题人利用考生"字母顺序即大小关系"的直觉,设计'Z'<'z'看似成立,却忽略 ASCII 码中大小写差距巨大。更阴险的是"输出为 0"这一表述:考生若混淆布尔值与整数的转换,或误以为比较结果为 0 代表 false,就会掉进陷阱。只背结论不推演 ASCII 码数值的考生必错。
🔄 反命题思维 若将'Z'改为'a',则'a'-'A'=32,32<57 仍为 true,输出 1;若改为比较等于'z'-'A',则 25==57 为 false,输出 0。刷到此类题先问:命题人想考我什么?这里考的是字符数值计算与布尔转换,而非字母顺序或真假直觉。