- lintcode: Flip Bits
Notice
Both n and m are 32-bit integers.
Example
Given n = (11111), m = 14
(01110), return .
以上的分析过程对于正数来说是毫无问题的,但问题就在于如果出现了负数如何破?不确定的时候就来个实例测测看,以-2为例,(-2) & (-2 - 1)的计算如下所示(简单起见这里以8位为准):
细心的你也许发现了对于负数来说,其表现也是我们需要的——的含义即为将二进制比特位的值为1的最低位置零。逐步迭代直至最终值为0时返回。
Python
Java
Python 中 int 溢出时会自动变为 long 类型,故处理负数时需要求补数中0的个数,间接求得原异或得到的数中1的个数。
考虑到负数的可能,C/C++, Java 中循环终止条件为a_xor_b != 0
,而不是.
复杂度分析
关于 Python 中位运算的一些坑总结在参考链接中。