Problem
Determine the number of bits required to flip if you want to convert integer n to integer m.
Example
Given n = 31 (11111), m = 14 (01110),
return 2
.
Note
-1的二进制补码就是32个1,因此这道题一定要考虑正负号的问题。
先将a和b异或得到c,若c为负,就说明a和b的符号不同,所以要多一次符号位的转换。
然后去检查c的二进制包含多少个1,方法是对c的每一位除以2取余。如果为1,就说明那一位为1,即a和b在那一位不同,需要进行转换。每次取余之后,c减小为二分之一,删除已经检查过的高位。
Solution
class Solution {
public static int bitSwapRequired(int a, int b) {
int c = a ^ b, count = 0;
if (c < 0) {
c ^= Integer.MIN_VALUE;
count++;
}
while (c != 0) {
count += c % 2;
c /= 2;
}
return count;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。