476. 数字的补数


Problem: 476. 数字的补数

思路

直接对num进行异或,异或对象为与num等长(没有前导零位)的1。

示例1:

输入:num=5
输出:2
解释:5 的二进制表示为 101(没有前导零位)与 111 异或得补数 010 即 2 。

Code

1
2
3
4
5
6
7
8
class Solution
{
public:
int findComplement(int num)
{
return num ^ (0xffffffff) >> __builtin_clz(num);
}
};