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

Note:

The given integer is guaranteed to fit within the range of a 32-bit signed integer.

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.

~num取反 但是把所有leading 0都跟着取反了。例如5: 101, ～5 不是010， 是1111..010。

所以制作一个mask，111， 使~num & mask即可。

**如何制作mask？一个可以到处用的trick：**

(Integer.highestOneBit(num) << 1) – 1

例如5，Integer.highestOneBit(num) = 0b100, 右移一位变成 1000，再减1变成111

### Like this:

Like Loading...