mirror of
https://github.com/teivah/100-go-mistakes.git
synced 2026-06-20 16:45:56 +08:00
15 lines
263 B
Go
15 lines
263 B
Go
package main
|
|
|
|
const (
|
|
m1 = 0x5555555555555555
|
|
m2 = 0x3333333333333333
|
|
m4 = 0x0f0f0f0f0f0f0f0f
|
|
h01 = 0x0101010101010101
|
|
)
|
|
|
|
func popcnt(x uint64) uint64 {
|
|
x -= (x >> 1) & m1
|
|
x = (x & m2) + ((x >> 2) & m2)
|
|
x = (x + (x >> 4)) & m4
|
|
return (x * h01) >> 56
|
|
}
|