已知 a 为 int 类型变量,下列表达式不符合语法的是( )。
位运算:&(与)、|(或)、^(异或)、~(取反)、<<(左移)、>>(右移)。异或性质:a^a=0,a^0=a。
区分逻辑运算(&&,||,!)和位运算(&,|,~,!)。左移右移注意符号位的处理(算术右移vs逻辑右移)。负数的位运算要小心。
【考点】运算符优先级|后缀自增语法|C++表达式规范
解题思维:看到选项先扫一眼结构——C++表达式里运算符之间必须合法衔接。a++是后缀形式,后面要么接运算符要么结束,不能直接跟数字。正确写法是a++ + 3或(a++) + 3。其余三个都符合语法规则:&a是取地址表达式,+a是单目加,- -4是双负号(合法但多余)。
陷阱拆解:
&a + 3:取地址与加法可混搭,优先级没问题+a & 3:单目加与按位与共存,语法允许a - - 4:减号后面跟负号,虽奇怪但编译器不报错a++3:后缀++后必须接运算符,这里直接跟了字面量3,违反C++语法规范,编译期直接报错命题人把后缀自增的拼写规则藏进选项,专卡那些只记优先级、不背语法的考生。
反命题思维:这类题的本质是考察表达式书写规范而非运算结果。遇到含++或--的选项,先问自己"后面有没有合法运算符?"——有就继续,没有就警惕。刷到类似题前先确认:后缀自增只能用于变量,且其后必须接运算符或结束符。