public int findComplement(int num) {
int i = 0;
while(i < num) {
i = i << 1 | 1;
}
return i - num;
}00001111(num) + 11110000(res) = 11111111(i)
利用这个原理便可以求得res,即i < num时,不停左移一位并在最后一位补上一个1,最后i - num便可得到结果。
本文介绍了一种求整数补数的有效算法。该算法通过不断将数字左移并在末位补充1的方式,构造出一个全1的掩码,然后用此掩码减去原数即可得到补数。这种方法避免了使用额外的空间且效率较高。
public int findComplement(int num) {
int i = 0;
while(i < num) {
i = i << 1 | 1;
}
return i - num;
}00001111(num) + 11110000(res) = 11111111(i)
利用这个原理便可以求得res,即i < num时,不停左移一位并在最后一位补上一个1,最后i - num便可得到结果。
623

被折叠的 条评论
为什么被折叠?