## 题目描述

Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation.

Note:

1. The given integer is guaranteed to fit within the range of a 32-bit signed integer.
2. You could assume no leading zero bit in the integer's binary representation.

Example 1:

``````Input: 5
Output: 2
Explanation: The binary representation of 5 is 101 (no leading zero bits), and its complement is 010\. So you need to output 2.``````

Example 2:

``````Input: 1
Output: 0
Explanation: The binary representation of 1 is 1 (no leading zero bits), and its complement is 0\. So you need to output 0.``````

## 解法一

### 思路

1. 找到最小的大于原数字的二进制值仅有一位为1的数；
2. 将此数减1；
3. 与原数字按位求异或。

### Python

``````class Solution(object):
def findComplement(self, num):
"""
:type num: int
:rtype: int
"""
all_ones = 1
while all_ones <= num:
all_ones <<= 1
all_ones -= 1
return all_ones ^ num``````

### Java

``````public class Solution {
public int findComplement(int num) {
long allOnes = 1;
while (allOnes <= num) {
allOnes <<= 1;
}
allOnes -= 1;
return (int) allOnes ^ num;
}
}``````

### C++

``````class Solution {
public:
int findComplement(int num) {
long allOnes = 1;
while (allOnes <= num) {
allOnes <<= 1;
}
allOnes -= 1;
return (int) allOnes ^ num;
}
};``````