0476. Number Complement

476. Number Complement #

题目 #

对整数的二进制表示取反 (0110) 后,再转换为十进制表示,可以得到这个整数的补数。

如整数 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;
    }
}