位运算疑问:为何14 & -14等于2、16 & -16等于16?
位运算
x & -x 的结果解析 要搞懂14 & -14 = 2和16 & -16 = 16的原因,核心是理解计算机中负数的二进制存储规则——所有负数都以补码形式存在,补码的计算逻辑是:对正数的二进制取反(得到反码)后加1。
拆解14 & -14的计算过程
- 14的8位二进制表示:
00001110 - 计算-14的补码:
- 先取14的反码:
11110001 - 反码加1得到补码:
11110010
- 先取14的反码:
- 执行按位与运算:
结果00001110 & 11110010 -------- 0000001000000010对应的十进制就是2。
拆解16 & -16的计算过程
- 16的8位二进制表示:
00010000 - 计算-16的补码:
- 先取16的反码:
11101111 - 反码加1得到补码:
11110000
- 先取16的反码:
- 执行按位与运算:
结果00010000 & 11110000 -------- 0001000000010000对应的十进制就是16。
通用规律总结
x & -x的本质是保留x二进制中最右侧的1,将其余所有位清零:
- 14的二进制
00001110最右侧的1在第1位(从0开始计数),对应数值2^1=2,所以结果为2; - 16的二进制
00010000只有唯一的1在第4位,对应数值2^4=16,所以结果为16。
内容的提问来源于stack exchange,提问作者Rudda Beltrao
相关产品推荐
相关产品推荐

