问题描述
对整数的二进制表示取反(0 变 1 ,1 变 0)后,再转换为十进制表示,可以得到这个整数的补数。
例如,整数 5 的二进制表示是 “101” ,取反后得到 “010” ,再转回十进制表示得到补数 2 。
给你一个整数 num ,输出它的补数。
问题分析
以5为例,采用异或操作用原数5异或上"111"就能得到相应的补数,由此我们可以知道整个问题就是让原数的二进制数码异或上一个与原数的二进制数码一样长度的全1二进制数码。
代码
int findComplement(int num) {
int n = num;
int count = 0;
while(n!=0){
n/=2;
count=(count<<1)+1;
}
count = ~count;
return ~(num^count);
}