lintcode_181. 将整数A转换为B

如果要将整数A转换为B,需要改变多少个bit位?

 注意事项

Both n and m are 32-bit integers.

样例

如把31转换为14,需要改变2个bit位。

(31)10=(11111)2

(14)10=(01110)2

按位与,非0累计

class Solution:
    """
    @param: a: An integer
    @param: b: An integer
    @return: An integer
    """
    def bitSwapRequired(self, a, b):
        # write your code here
        ans = 0
        for i in range(32):
            if a & 1 != b & 1:
                ans += 1
            a >>= 1
            b >>= 1
            if a == b:
                return ans
        return ans

实际为统计ab异或后非0个数

九章算法:

class Solution:
    """
    @param a, b: Two integer
    return: An integer
    """
    def bitSwapRequired(self, a, b):
        # write your code here
        c = a ^ b # a b 异或
        cnt = 0   
        for i in xrange(32):
            if c & (1 << i) != 0:
                cnt += 1
        return cnt

 

posted @ 2017-12-14 11:07  Tom_NCU  阅读(142)  评论(0编辑  收藏  举报