首页 > 代码库 > 476. Number Complement
476. Number Complement
题目
Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation.
Note:
- The given integer is guaranteed to fit within the range of a 32-bit signed integer.
- You could assume no leading zero bit in the integer’s binary representation.
Example 1:
Input: 5 Output: 2 Explanation: The binary representation of 5 is 101 (no leading zero bits), and its complement is 010. So you need to output 2.
Example 2:
Input: 1 Output: 0 Explanation: The binary representation of 1 is 1 (no leading zero bits), and its complement is 0. So you need to output 0.
分析
将int的二进制表示中所有0变为1,1变为0
解答
解法1:(我)
例1:
5: 00000000000000000000000000000101
~5: 11111111111111111111111111111010 (补码形式,原码是10000000000000000000000000000110,值为-6)
-23: 11111111111111111111111111111000 (补码形式,原码是10000000000000000000000000001000,值为-23)
~5-(-23): 00000000000000000000000000000010 (值为2)
int的最大值:01111111111111111111111111111111 231-1
int的非最小值:11111111111111111111111111111111 -(231-1)
int的最小值:10000000000000000000000000000000 -231 (特殊:使用以前的-0的补码来表示, 所以-231并没有原码和反码表示)
例2:
231-1: 01111111111111111111111111111111
~(231-1): 10000000000000000000000000000000 (值为-231)
-231: 10000000000000000000000000000000
~(231-1)-(-231): 00000000000000000000000000000000 (值为0)
注:此处~(231-1)-(-231)不能写为~(231-1)+231,因为int中正数231超出最大值范围,会被解析成231-1,而负数(-231)没有超出最小值范围
1 public class Solution { 2 public int findComplement(int num) { 3 return ~num-(int)-Math.pow(2,32-Integer.numberOfLeadingZeros(num)); 4 } 5 }
476. Number Complement