Description:
https://leetcode.com/problems/number-complement/#/description
Boundary:
NO
Algorithm:
如果直接~num,C++直接进行补码取反。
因此需要设定mask,然后一位一位操作。
Reference: http://blog.chinaunix.net/uid-25909722-id-2856108.html
C的位操作常常使用使用一个unsigned int变量来作为位容器。
设置特定的位用| (OR);
清除特定的位用&(AND);
取反特定的位用^(XOR);
取反所有的位用~(NOT);
C++中bitset容器来操作位
可以通过to_string()成员函数将容器输出为一个string字符串;
可以通过to_long()成员函数将容器输出到传统的用于C风格的位容器中。
Code:
class Solution {
public:
int findComplement(int num) {
unsigned mask = ~0;
while (mask & num) mask <<= 1;
return ~mask & ~num;
}
};