核心内容摘要
《闭俗情侣与玩咖辣妹们》:当纯爱滤镜碎裂,禁忌之恋悄然滋长
位操作(n1 ^ (n2 -n
)的结果是什么我们来一步步分析n1 ^ (n2 -n
这个表达式。
理解n2 -n2这是位操作中一个经典的技巧用于获取数字的最低有效位Lowest Set Bit, LSB。
原理-n2在二进制补码中等于~n2 1n2 -n2的结果会保留 n2 的最右边的 1其他位都变为 0示例n2 12 (二进制:
-n2 -12 (二进制补码: ...
n2 -n2 4 (二进制:
↑ 只保留了最右边的
理解完整的表达式n1 ^ (n2 -n
作用n2 -n2得到一个只有一位是1的数字即n2的最低有效位然后将这个结果与n1进行异或XOR操作异或的特性异或是按位操作0^00,0^11,1^01,1^10与一个只有一位是1的数异或相当于翻转n1的对应位
实际效果假设n2 -n2 maskmask只有一位是1其他都是0那么n1 ^ mask 将n1在mask为1的那一位进行翻转具体例子n113# 二进制: 1101n212# 二进制: 1100# 计算过程n2-n
(假设8位-
01004n1^(n2-n
13^41101^010010019结果1101变成了1001翻转了从右往左数第3位0-based索引为
应用场景这个操作在树状数组Fenwick Tree等数据结构中很常见# 在树状数组中更新下一个索引defnext_index(i):returni(i-i)# 在树状数组中查询前一个索引defprev_index(i):returni-(i-i)
5.