以下代码的说法正确的是什么( )
#include <iostream>
using namespace std;
int main() {
int a = 0b1101;
int b = 0b1011;
cout << (a ^ b);
return 0;
}答案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(十六进制),答案不变但考察进制转换;如果把 ^ 改成 &,答案会变,考察按位与;如果把二进制改成十进制加法,考察算术运算。刷到类似题时,先问自己"命题人想考我什么"——是进制识别?位运算规则?还是运算符混淆?