GESP 三级 · GESP 202503 C++ 三级 第 10 题

选择题 · 答案 D

← 整套速查表 GESP 三级 全部真题

题目

以下代码的说法正确的是什么( )

#include <iostream>
using namespace std;

int main() {
    int a = 0b1101;
    int b = 0b1011;
    cout << (a ^ b);
    return 0;
}
答案:D

解题思维

答案D。cout用于输出到标准输出(通常是屏幕)。cin从标准输入读取。

常见错误

cout和cin在iostream头文件中定义,使用时需#include <iostream>。

详细解析(节选)

【考点】二进制字面量|按位异或运算

1. 考纲定位:GESP 三级 C++ 模块,二进制字面量与位运算符属于基础语法。这道题卡住的是绝大多数考生对"0b"前缀的陌生感,以及把"整体异或"与"按位异或"混淆的认知短板。命题人故意用二进制字面量包装,逼迫你必须先识别进制再分析运算,否则直接背"异或=不同为1"也会掉进陷阱。

2. 解题思维:看到 0b1101 和 0b1011 先转十进制(13 和 11),再逐位对齐做异或:1^0=1,1^1=0,0^1=1,1^1=0 → 0010 = 2。通法:位运算题永远先转进制对齐,再按位模拟;遇到 0b/0x 前缀务必先识别进制,否则后续全错。

3. 陷阱拆解:A 项"整体异或"偷换概念,命题人利用考生对位运算不熟悉,把"按位"与"整体"混为一谈;B 项"按位同或"故意放一个名称相似的运算符(同或是 XNOR),制造符号混淆;C 项"按位与"更是把符号 & 与 ^ 混用,因为两者都属位运算,只求快的人容易看错。最阴险的是二进制字面量 0b,很多考生没见过,直接当成十六进制或十进制,导致判断错误。如果你只背结论、不理解本质,就会掉进这个陷阱。

4. 反命题思维:如果把 0b 换成 0x(十六进制),答案不变但考察进制转换;如果把 ^ 改成 &,答案会变,考察按位与;如果把二进制改成十进制加法,考察算术运算。刷到类似题时,先问自己"命题人想考我什么"——是进制识别?位运算规则?还是运算符混淆?

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断