给定一个正整数,输出其补码。补码策略是翻转其二进制表示的位。
注意:
- 给定的整数保证在32位有符号整数的范围内。
- 您可以假定整数二进制表示中没有前导零位。
示例1:
输入: 5
输出:2
说明:5的二进制表示为101(无前导零位),其补码为010,所以需要输出2。
示例2:
输入: 1
输出: 0
说明:1的二进制表示为1(无前导零位),其补码为0.所以需要输出0。
好的解决方案是这样的,找到这个数从左边数第一个位1的位置,找到一个掩码从左边第一位开始都为1直到这个位置后,才这个位置一直到最右端都为0,然后掩码和这个数做或运算,然后取反.
2.也可以先给掩码取反然后和这个数做异或运算
这是第一种:
int findComplement(int num) {
int mask =(~0);
while(num & mask)
mask <<= 1;
return ~(num | mask);
}
第二种:
int findComplement(int num) {
int mask =(~0);
while(num & mask)
mask <<= 1;
mask = (~mask);
return num ^ mask;
}