zoukankan      html  css  js  c++  java
  • golang 统计uint64 数字二进制存储中1的数量

    package main

    import (
        "fmt"
    )

    // pc[i] is the population count of i.
    var pc [256]byte

    func init() {
        for i := range pc {
            pc[i] = pc[i/2] + byte(i&1)
        }
    }

    func PopCount(x uint64) int {
        return int(pc[byte(x>>(0*8))] +
            pc[byte(x>>(1*8))] +
            pc[byte(x>>(2*8))] +
            pc[byte(x>>(3*8))] +
            pc[byte(x>>(4*8))] +
            pc[byte(x>>(5*8))] +
            pc[byte(x>>(6*8))] +
            pc[byte(x>>(7*8))])
    }

    func AnalyzePopCount(x uint64) int {
        count := 0
        var i uint
        for i = 0; i < 8; i++ {
            tmpNum := x >> (i * 8)
            fmt.Printf("tmpNum: %v %x %b ", tmpNum, tmpNum, tmpNum)
            byteNum := byte(tmpNum)
            fmt.Printf("byteNum: %v %x %b count:%d ", byteNum, byteNum, byteNum, pc[byteNum])
            count += int(pc[byteNum])
        }
        return count
    }

    func main() {
        /*
            fmt.Println(2 << 1)
            fmt.Println(2<<1 + 1)
            fmt.Println(4 >> 1)
        */
        fmt.Println(pc[255])

        for i := range pc {
            fmt.Printf("%v, ", pc[i])
            if (i % 16) == 15 {
                fmt.Println()
            }
        }
        pc[0] = 255
        fmt.Println(pc[0])
        pc[0] = 254
        fmt.Println(pc[0])

        //fmt.Printf(" ")
        //fmt.Println(PopCount(23495631783903473))
        //fmt.Println(AnalyzePopCount(23495631783903473))
    }

  • 相关阅读:
    Parameter Binding in ASP.NET Web API
    Which HTTP methods match up to which CRUD methods?
    ErrorHandling in asp.net web api
    HttpStatusCode
    Autofac Getting Started(默认的构造函数注入)
    Autofac Controlling Scope and Lifetime
    luvit 被忽视的lua 高性能框架(仿nodejs)
    undefined与null的区别
    VsCode中使用Emmet神器快速编写HTML代码
    字符串匹配---KMP算法
  • 原文地址:https://www.cnblogs.com/barfoo/p/9314064.html
Copyright © 2011-2022 走看看