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))
    }

  • 相关阅读:
    页面渲染速度增加的方法和建议
    五(六)、Package & import
    五(五)、构造器 & JavaBean &this
    五(四)、封装性
    五(三)、方法
    五(二)、匿名对象
    五(一)、类&对象概述
    六、java 异常处理
    四、java 数组
    三、java 基础提炼
  • 原文地址:https://www.cnblogs.com/barfoo/p/9314064.html
Copyright © 2011-2022 走看看