求一个数的complement number.
input=5 output=2
input=2 output=1
由于2^2<=5<2^3,二进制表示输出为111-101=2.
由于2^1<=2<2^2,二进制表示输出为11-10=1.
int findComplement(int num) {
int i=0;
while(pow(2,i)<=num) i++;
return pow(2,i)-num-1;
}
解法2
int findComplement(int num) {
int temp = num, mask = 1;
while(temp){
temp >>= 1;
mask <<= 1;
}
return ((mask - 1) ^ num);
}
原理类似,左移相当于乘2,右移相当于除2.目的在于找到比num刚好多一位的最小二进制整数。