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 }