这道题就是靠位操作,按理说只要返回原来的反就可以了,但是前边的0要过滤掉,所以,要想办法屏蔽前边的0,。然后后边用全部为1的掩码与一下原来的数的反即可。
int findComplement(int num) {
unsigned int mask = ~0;
while(num&mask) mask <<= 1;
return ~mask & ~num;
}
我参考了高票答案,确实牛逼啊。
这道题就是靠位操作,按理说只要返回原来的反就可以了,但是前边的0要过滤掉,所以,要想办法屏蔽前边的0,。然后后边用全部为1的掩码与一下原来的数的反即可。
int findComplement(int num) {
unsigned int mask = ~0;
while(num&mask) mask <<= 1;
return ~mask & ~num;
}