在 C++ 语言中,表达式 (0xff == 255) 的值为 true。( )
看到 0xff 别慌,先认出这是十六进制整数,按位权展开算出十进制值,再和 255 比大小,记住 == 是判断相等不是赋值。
很多同学习惯把 0x 开头的当成变量名去查定义,结果发现没定义就瞎猜;还有人把 0xff 看成八进制 015(其实是 1×8+5=13)或者二进制 01111111(255 但写法不对),这都是没掌握十六进制规则。另外容易把 == 看成赋值,以为左边被赋了值,其实比较结果是布尔值 true/false。
【考点】十六进制整数常量语法、关系运算符语义
命题人在这题挖的坑很经典:用 0xff 这个合法的十六进制常量,专门卡那些对 C++ 语法规则不熟的同学。十六进制在 C++ 里必须以 0x 或 0X 开头,后面跟 0-9 和 a-f(不区分大小写)。0xff 里的 f 代表十进制的 15,所以 0xff = 15×16 + 15 = 255。这和右边的 255 完全相等,因此表达式 (0xff == 255) 的结果就是 true。
这里要特别强调运算符优先级:== 是关系运算符,返回布尔值,不是赋值运算符。赋值是 =,且赋值有左右方向,而 == 只是比较。很多同学看到两个数相等就以为题目在考赋值,其实纯考语法识别和进制转换。
为什么容易错?一是看到数字前缀 0x 下意识想“这是个变量”,没意识到这是语言规定的整数表示方式;二是进制转换不熟练,把 f 当成八进制的 7 或者二进制里的 1,导致算出错误数值;三是混淆 == 和 =,以为左边被赋了值,逻辑全乱。
【解题心法】拿到这种题,第一步先扫一眼有没有特殊前缀(0x、0b、0o),确定进制;第二步按位权展开计算十进制值;第三步看运算符是不是 ==,确认是相等判断;最后直接下结论。这样一步步推,就不会被命题人带节奏。
【考频趋势】数据表示类题目在题库里很常见,103 道题覆盖所有级别。近年热度明显上升:2023 年考了 23 题,2024 年冲到 30 题,2025 年回落至 20 题,2026 年又回升到 10 题。GESP 三级作为入门级,是这类基础题的高频战场,共出过 36 题,远超其他级别。这说明命题人特别喜欢在三级里用十六进制、二进制这些基础概念来区分学生是否真正读懂了 C++ 语法。
【未来预测】基于数据表示类题目持续高发的趋势,尤其是 2024-2026 年每年都有大量出现,可以合理推测:未来考试中,十六进制、二进制、八进制的识别与转换仍将是必考内容,大概率会继续在 GESP 三级、四级以及 CSP 入门级中高频出现。命题人可能会继续用类似 0xff == 255 这种“陷阱式”题目,或者把进制转换嵌入到更复杂的表达式里(比如混合运算)。因此,扎实掌握进制规则、认清前缀含义、分清运算符,是应对这类题目的核心。
综上,本题答案选 A(正确)。