476. Number Complement #
题目 #
对整数的二进制表示取反 (0
变 1
,1
变 0
) 后,再转换为十进制表示,可以得到这个整数的补数。
如整数 5
的二进制表示是 "101"
,取反后得到 "010"
,再转回十进制表示得到补数 2
。
给定一个整数,输出其补数。
注: 1 <= num < 2^31
思路 #
代码 #
class Solution {
public int findComplement(int num) {
if (num == 0) return 1;
boolean flag = false;
for (int i = 30; i >= 0; i--) {
if (((num >> i) & 1) == 1) flag = true;
if (flag == true) {
num ^= 1 << i;
}
}
return num;
}
}