对于任意一个非负整数,统计其二进制展开数位1的总数
2020-02-01 本文已影响0人
韩小禹
问题:对于任意一个非负整数,统计其二进制展开数位1的总数。
- 例如:129 = 1000 0001 ,共计2个1。
package main
import "fmt"
func countOnes(num int) int {
ones := 0
for 0 < num {
fmt.Printf("%b\n", num)
ones += 1 & num
num = num >> 1
}
return ones
}
func main() {
ones := countOnes(12900)
fmt.Printf("12900的二进制数中含有%d个1\n", ones)
}
# 运算结果
11001001100100
1100100110010
110010011001
11001001100
1100100110
110010011
11001001
1100100
110010
11001
1100
110
11
1
12900 的二进制数中含有6个1
111111
11111
1111
111
11
1
63 的二进制数中含有6个1
10000001
1000000
100000
10000
1000
100
10
1
129 的二进制数中含有2个1