数字的补数(Java)

mac2024-07-24  62

数字的补数

题目:

给定一个正整数,输出它的补数。补数是对该数的二进制表示取反。 注意: 给定的整数保证在32位带符号整数的范围内。 你可以假定二进制数不包含前导零位

思想:

使用长度和原数num的二进制数的长度相同且全为1的二进制数和num二进制数进行异或运算,结果即为所求。代码中减一的部分是因为num2循环左移,应该为第一个数为一后面都为零的二进制,减一即可构成一个全为一且长度相等的二进制数。

代码:

class Solution { public int findComplement(int num) { int tmp = num; int num2 = 1; while(tmp > 0){ num2 <<= 1; tmp >>= 1; } num2 -= 1; return num^num2; } }
最新回复(0)