码迷,mamicode.com
首页 > 其他好文 > 详细

将整数A转换为B

时间:2016-06-12 03:17:07      阅读:274      评论:0      收藏:0      [点我收藏+]

标签:

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

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

(31)10=(11111)2

(14)10=(01110)2


之前,我说过位运算的一些基本操作(详见:点击打开链接),此处其实求的是两个二进制中不同的位的个数。所以,可以采用两种方法。

1. 直接求出两个数的二进制表示,然后比较两个01字符串的不同的位的个数

2. 先对两个数异或,这样,求出的二进制数中1的个数就是两个数的不同位的个数

我这里只给出第二种方法的代码。

因为之前已经知道怎么求出一个二进制数中1的个数的方法(详见:点击打开链接),所以,此处讲解忽略。还是注意python中对负数二进制的处理就行。代码如下:

class Solution:
    """
    @param a, b: Two integer
    return: An integer
    """
    def bitSwapRequired(self, a, b):
        a ^= b
        if a > 0:
            return self.helper(a)
        else:
            temp = abs(a - 1)
            return 32 - self.helper(temp)

    # helper()统计正数的二进制中1的个数
    def helper(self, n):
        count = 0
        while n != 0:
            n = n & (n - 1)
            count += 1
        return count
        # write your code here


先对两个数异或,再求解异或之后的二进制值中1的个数。

将整数A转换为B

标签:

原文地址:http://blog.csdn.net/guoziqing506/article/details/51601472

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!