a << 2 | 1 到底先算谁?—— 位运算优先级的一个坑
a=3 时 (a << 2 | 1) 输出 13:<< 优先级高于 |,先左移 2 位得 12,再按位或 1 得 13。附位运算优先级顺序、易错写法对比(a<<(2|1)=24、a<<2+1=24)与 CSP-J 考点总结。
n &= (n-1) 到底做了啥?一行代码数出二进制里有几个 1
n &= (n-1) 是 Brian Kernighan 算法,每执行一次清掉最低位的 1,循环次数即二进制中 1 的个数。n=10(1010₂) 输出 2。附模拟过程、原理、复杂度对比、判断 2 的幂与 CSP-J 考点总结。
-5 >> 1 的结果是什么?—— 算术右移与向下取整陷阱
-5 >> 1 的结果是 -3:负数是算术右移(补符号位),等价于向下取整除法 floor(-5/2),而 -5/2 = -2 是向零取整,两者在负奇数时差 1。附补码演示、通用规律与 CSP-J 考点总结。