题目来源 - leetcode
Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation.
解题
int findComplement(int num) {
int temp = num, mask = 1;
while(temp){
temp >>= 1;
mask <<= 1;
}
return ((mask - 1) ^ num);
}
分析
首先是创建一个等长的数,然后由“1”组成,之后和原数进行“^”操作,得出的结果,就是我们所需要的。
如何打印 bit 格式 参考自 - stackoverflow
//assumes little endian
void printBits(size_t const size, void const * const ptr)
{
unsigned char *b = (unsigned char*) ptr;
unsigned char byte;
int i, j;
for (i=size-1;i>=0;i--)
{
for (j=7;j>=0;j--)
{
byte = (b[i] >> j) & 1;
printf("%u", byte);
}
}
puts("");
}
以上。