咱也不懂咱也不敢问,啥叫掩码?
总是思路就是把这个数的二进制各位取反就可以,但是呢,取反之后就带有符号位了,就很难受,那么该如何的去除符号位就变成了问题的关键。
也就是他们成为求掩码的过程:求出这个数的最高位为1的位置,比如说在最高位在第五位的位置,即为1XXXX。那么只需要把取反的数与11111求与就可以把符号位规避掉。
class Solution {
public int findComplement(int num) {
int count = 0;
int tmp = num;
while(tmp!=0){
tmp /= 2;
count++;
}
return (~num) & ((1<<count)-1);
}
}
中间实验,为啥对5取反,得到的却是-6?
这位靓仔给出了解答:https://www.jianshu.com/p/535ad0daba2a