如果要将整数A转换为B,需要改变多少个bit位?
来源:互联网 发布:如何查看淘宝卖家姓名 编辑:程序博客网 时间:2024/04/28 16:38
Python实现
样例
如把31转换为14,需要改变2个bit位。
(31)10=(11111)2
(14)10=(01110)2
思路
1、比较容易想到的是移位,然后遇到1计数器加1就好了。但是需要注意终止条件,正数循环移位会得到0,负数并不是这样,会得到1000…000,也就是-2**31。因为Java/Python中整数是以32个bit位存储的,第1位是符号位,31位是值。所以我们的移位操作最多进行31次,这个信息也可以做为循环中止条件。
2、如果是统计正整数的bit位中有几个1可以有如下代码:
count = 0while num: num &= (num - 1) count += 1
所以我们可以先对输入的两个数取异或得到num,然后统计num的bit位中有几个1就可以了。但是负数需要特别注意,负数的bit位是补码。而且不能用上面的方法
输入:1, -1
bit位: 1=(0 000…0001),-1=(1 111…111)
异或:-2 = (1 111…110)
因此问题就变成了怎么处理负数:
1、去负号
num ^= -2**31 # 或者num &= (2**31 - 1)
2、……没想到
0 0
- 如果要将整数A转换为B,需要改变多少个bit位?
- 给定两个正整数(二进制形式表示)A和B,问把A变为B需要改变多少位(bit)?也就是说,整数A和B的二进制表示中有多少位是不同的?
- 给定两个正整数(二进制形式表示)A和B,问把A变为B需要改变多少位(bit)?也就是说,整数A和B的二进制表示中有多少位是不同的?
- 需要改变几位,才能将整数A转成整数B
- 将整数A转换为整数B
- Lintcode 将整数A转换为B
- 题目:将整数A转换为B
- LintCode 将整数A转换为B
- 将整数A转换为B
- 将整数A转换为B
- lintcode----将整数A转换为B
- 将整数A转换为B
- 将整数A转换为B
- LintCode:将整数A转换为B
- LintCode : 将整数A转换为B
- 将整数A转换为B
- 将整数A转换为B
- lintcode:将整数A转换为B
- NYOJ_1036 非洲小孩 HDU_1687 Lucky Light
- leetcode Inorder Successor in BST
- Hibernate+Mysql写数据库的中文乱码问题
- Java程序编写实现日历的打印
- Pro JPA2读书笔记系列(五)-第五章(集合映射)
- 如果要将整数A转换为B,需要改变多少个bit位?
- POJTiling 2506(递推+大数)
- 遍历每个行(或列)的某个列(某个行)值做判断并作出动作
- 文章标题
- 不用加减乘除做加法
- 【POJ 2947】Widget Factory(高斯消元+逆元)
- Android Studio调试技巧
- Pro JPA2读书笔记系列(六)-第六章(实体管理器)
- 读代码笔记《一》