C++ 表达式 2 - 1 && 2 % 10 的值是( )。
这题考的是运算符优先级和布尔值转换。拿到题先别急着算,脑子里过一遍优先级表:算术运算(减号、取模)优先级高于逻辑运算(&&)。所以表达式实际是(2-1)与(2%10)做逻辑与。
最容易掉进的坑有两个:一是把非零整数2误当成假值(false)去算,导致结果算成0;二是完全无视优先级,把&&当加法或者把1&&2当成1&&0来算。还有人会纠结取模2%10到底等于多少,其实新手陷阱就在于这里,2%10就是2,别慌。
GESP C++一级大纲第5章“运算符与表达式”,核心就是运算优先级和逻辑运算符的求值规则。命题人放这道题,目的很明确:卡住那些只背语法、不懂优先级顺序的考生——绝大多数人看到&&就以为它是最高优先级,或者看到非零数就下意识当成假值处理。
拿到题先想:C++里二元运算符的优先级表里,算术运算符(-、%)都在逻辑运算符(&&)前面。所以表达式实际分组是(2 - 1) && (2 % 10),而不是2 - (1 && 2) % 10。
然后算:2 - 1 = 1,2 % 10 = 2,得到1 && 2。
最后转换:C++约定非零值视为true(即1),零视为false(即0)。1 && 2两个操作数都非零,逻辑与结果为true,输出为1,选B。
通法:遇到混合运算符,先画括号按优先级分组,再逐段计算,最后注意布尔与整型的隐式转换规则。
1 && 2算成1 && 0,误以为2是假值——这是把C++布尔转换规则搞反了。2 - (1 && 2) % 10算,得到2 - 0 = 2,错在优先级顺序。1 + 2 = 3,属于概念混淆。%本身:很多考生一看到取模就慌,其实2 % 10 = 2是新手级陷阱。命题人若把&&换成||,结果变成1 || 2 = 1;若把%换成/,2 / 10 = 0,则1 && 0 = 0(选A)。刷到类似题先问自己:“这里有没有把高优先级的算术运算符误当成逻辑运算符?有没有把非零值当成假值?”这两点踩中,基本就掉进坑里了。
从题库数据看,本知识点属于“基础语法”大类,整体考频极高:1295题,覆盖11个级别,2023年287题、2024年413题、2025年401题,近三年几乎每年都在考。在GESP一级中更是重灾区,共332题,远超二级(283题)和三级(215题)。这说明命题人非常看重学生对基本运算符优先级的掌握,尤其是混合表达式这种“看似简单实则易错”的类型。
基于数据,未来GESP一级和二级继续高频考查混合运算符的优先级判断几乎是板上钉钉。虽然暂无足够依据预测具体题目形式(比如会不会引入更多嵌套或位运算),但可以肯定的是,只要学生能把“先算算术、再算逻辑、非零即真”这条铁律刻在脑子里,这类题就不会丢分。