---
# System prepended metadata

title: Leetcode 476. Number Complement
tags: [Leetcode]

---

# Leetcode 476. Number Complement
###### tags: `Leetcode` 

題目 
The complement of an integer is the integer you get when you flip all the 0's to 1's and all the 1's to 0's in its binary representation.

For example, The integer 5 is "101" in binary and its complement is "010" which is the integer 2.
Given an integer num, return its complement.

 

Example 1:

Input: num = 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: num = 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.原本是用count去找有幾個bit
2.後來看到別人用以下方法

＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

```
/*
ex : num = 5
unsigned int mask = ~0;就是把每個bit都設成1                     （mask = 1111..1111)
然後把mask跟num做and，如果是true就把mask左移=>可以知道num有幾個bit   (mask = 111..1000)
return ~mask ^ num;                                          (~mask = 000..0111)
*/

int findComplement(int num){
    /*int res = 0;
    int count = 0;
    while(num)
    {
        res+=((num&1)^1)*pow(2, count++);
        num>>=1;
    }
    return res;
    */
    unsigned int mask = ~0;//set all bit to 1
    while (num & mask) 
        mask <<= 1;//calculate how many bits in nums
    return ~mask ^ num;
}
```