题目:给你一个 正 整数 num ,输出它的补数。补数是对该数的二进制表示取反。
1.首先讲num循环除以二,求得num的二进制位数
2.取相应位数位全一的数字temp
3.将num与temp进行异或运算,即为补数。
public int findComplement(int num) {
int count = 0;
long temp = num;
while(temp!=0){
temp = temp / 2;
count++;
}
temp = (long)Math.pow(2,count) - 1;
return (int)(num^temp);
}
ps:取temp的时候如果使用短整型,测试用例位数为32位数就会出现越界问题,所以采用长整型
网友评论