数字的补数(Java)

数字的补数

题目:

给定一个正整数,输出它的补数。补数是对该数的二进制表示取反。
注意:
给定的整数保证在32位带符号整数的范围内。
你可以假定二进制数不包含前导零位

思想:

使用长度和原数num的二进制数的长度相同且全为1的二进制数和num二进制数进行异或运算,结果即为所求。代码中减一的部分是因为num2循环左移,应该为第一个数为一后面都为零的二进制,减一即可构成一个全为一且长度相等的二进制数。

代码:

class Solution {
    public int findComplement(int num) {
        int tmp = num;
        int num2 = 1;
        while(tmp > 0){
            num2 <<= 1;
            tmp >>= 1;
        }
        num2 -= 1;
        return num^num2;
    }
}
发布了36 篇原创文章 · 获赞 2 · 访问量 972

猜你喜欢

转载自blog.csdn.net/y18771025420/article/details/102844161