题目:
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
解法思路
- 对于无符号数可以每次右移一位,并与1进行
|
运算,如果运算结果为1,则代表末位为1 - 对于有符号数n,每次进行一次
n & (n-1)
运算都会将n的二进制表示中最后一个1替换为0
本文的方法采用的是第二种解法。
对于正数6来说,二进制表示为00000110
,5的二进制表示为00000101
,00000110&00000101
的运算结果为00000100
。
负数以补码的形式存储,-6的二进制表示为11111010
,-7的二进制表示为11111001
,11111010&11111001
的运算结果为11111000
。
循环结束后,二进制表示中的1全部被替换为0。
1 | class Solution { |