一个 int 类型的值,做以下哪个操作,一定会变回原来的值?( )
这道题考查按位异或运算性质。拿到题先想:哪些运算是‘自反’的?异或满足 x^a^a=x,直接抵消;位移会丢位或补符号位,或和与是互补操作,都不能保证还原,所以锁定D。
学生容易把位移当成普通加减,以为左移再右移能回去,忽略了有符号右移是算术右移(高位补符号位),负数左移再右移会变;或者看到或和与就瞎凑,没看出或置1、与置0是互补的,净效果抹平低三位;还有人记混异或和取反,以为取反也能抵消,其实取反两次才回原值,但选项没给取反。
【考点】按位异或运算性质|算术移位陷阱|位运算互补性
GESP 三级 C++ 语言模块,考点锁定在按位异或运算性质与算术右移的底层行为。命题人专挑学生‘以为左移右移可逆’的盲区下手——三级考纲只要求了解位移,不要求掌握负数右移的算术特性,这处知识缝隙就是绝大多数人栽跟头的地方。