定义整数 int x = -5,则执行C++代码 cout << (x == (x << 1 >> 1)) 输出是( )。
看到链式位移先定优先级,有符号数右移补符号位
误判优先级把x<<1>>1当成x<<(1>>1);误以为负数右移高位补0或数值变小
考点:运算符优先级|有符号数右移规则
表达式 x == (x << 1 >> 1) 中,左移 << 优先级高于右移 >>,故 x << 1 >> 1 等价于 (x << 1) >> 1。
-5 << 1 结果为 -10。-10 >> 1 为算术右移,高位补符号位 1,结果仍为 -10。左右两边相等,输出 1。