题目要求:The complement strategy is to flip the bits of its binary representation。
其实求得就是~num,可是java中int型需要32bit来表示,如果把num=5(101)直接取反,得到的是11111111111111111111111111111010,即把5之前的0也全部给取反了。所以我们需要得到5的二进制表示中,首个1出现的位置,所以用int mask = Integer.MAX_VALUE和num做与运算,每做一次,mask左移一位。当while循环结束的时候,mask左移了多少位,num的二进制就有多少位。
public int findComplement(int num) {
int mask = Integer.MAX_VALUE;
while((mask & num) != 0) mask <<= 1;//用于判断num第一位的位置。
return ~mask & ~num;
}