整数转换。编写一个函数,确定需要改变几个位才能将整数A转成整数B。
示例1:
输入:A = 29 (或者0b11101), B = 15(或者0b01111) 输出:2
示例2:
输入:A = 1,B = 2 输出:2
提示:
- A,B范围在[-2147483648, 2147483647]之间
**难度**: Easy
**标签**: 位运算、
# -*- coding: utf-8 -*-
# @Author : LG
"""
执行用时:44 ms, 在所有 Python3 提交中击败了35.20% 的用户
内存消耗:13.6 MB, 在所有 Python3 提交中击败了100.00% 的用户
解题思路:
这里出现了个坑,之前一直没注意
原先直接写的 return bin(A ^ B).replace('0b','').count('1')
& 按位与
但一直出错,后面看解题发现:
```
一般来讲,整形数在内存中是以 补码 的形式存放的,输出的时候同样也是按照 补码 输出的。
但是在python中:
1. 整形是以 补码 形式存放的,输出的时候是按照 二进制 表示输出的;
2. 对于 bin(x)bin(x)bin(x)(xxx 为 十进制负数),输出的是它的原码的二进制表示加上一个负号,方便查看(方便个???)
3. 对于 bin(x)bin(x)bin(x)(xxx 为 十六进制负数),输出的是对应的二进制表示。
所以为了获得十进制负数的补码,我们需要手动将其和 0xffffffff 进行与操作,得到一个十六进制数,再交给 bin() 转化,这时内存中得到的才是你想要的补码。
作者:z1m
链接:https://leetcode-cn.com/problems/convert-integer-lcci/solution/yi-huo-jie-fa-python-3-c-by-z1m/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
```
"""
class Solution:
def convertInteger(self, A: int, B: int) -> int:
return bin((A & 0xffffffff) ^ (B & 0xffffffff)).replace('0b','').count('1')