package main
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型
* @return int整型
*/
func NumberOf1(n int) int {
// write code here
var res int
// 将 n 转换为 32 位二进制形式
if n < 0 {
n = n & 0xffffffff // 与 32 位 1 相与
}
// 每次 n-1 需要向高位的 1 借,相与后高位就变成了 0
// 110011 110010 -> n = 110010
// 110010 110001 -> n = 110000
// 110000 101111 -> n = 100000
// 100000 011111 -> n = 000000
// 共四次
for n != 0 {
n = n & (n - 1)
res++
}
return res
}

京公网安备 11010502036488号