zoukankan      html  css  js  c++  java
  • 统计uint64的数对应二进制数的1的个数

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

    //统计出o~255每个数对应二进制上1的个数
    func init() {
        for i := range pc {
            pc[i] = pc[i/2] + byte(i&1)
           // fmt.Printf("i = %d, pc[%d] = %d, pc[%d] = %d, byte(%d&1) =  %d ",
                i, i, pc[i], i/2, pc[i/2], i, byte(i&1))
        }
    }

    // PopCount return the population count (number of set bits) of x.
    //将x分部分左移到底八位(0~255)
    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 init() {
        for i := range pc {
            pc[i] = pc[i/2] + byte(i&1)
            fmt.Printf("i = %d, pc[%d] = %d, pc[%d] = %d, byte(%d&1) =  %d ",
                i, i, pc[i], i/2, pc[i/2], i, byte(i&1))
        }
    }

    // PopCount return the population count (number of set bits) of x.

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

  • 相关阅读:
    Dos.ORM logo.Net轻量级开源ORM框架 Dos.ORM
    C# FUNC 应用
    WCF教程网址
    C#扩展方法实现 byte[] 输出为HEX字符串形式
    apache配置,禁止指定后缀访问
    IServerChannelSinkProvider
    在服务器端的远程对象中加上抽象工厂的接口和实现类
    pannel加载窗体
    权限框架
    工作周记
  • 原文地址:https://www.cnblogs.com/barfoo/p/6666576.html
Copyright © 2011-2022 走看看