位运算统计二进制位为1的个数

代码来自 go程序设计语言 2.6.2示例,init()方法会初始化一个 256 容量的byte数组,一个byte为8位,统计时可以对于二进制按每8位进行统计,init()方法初始化后会得到一个 0~255范围内数字和位数对应的值,比如 0-0 1-1 2-1 3-2 …,利用这个数组来实现对二进制数每8位的一个统计。

package popcount// pc[i]是 i的统计
var pc byte[256]func init() {for i,_ := range pc {pc[i] = pc[i/2] + byte(i&1);}
}func popCount(x uint64) int {num := 0for int i=0; i<8; i++ {num += int(pc[byte(x >> i*8)])}return num
}

对一个uint强转byte , go语言中会丢弃高位保留低位,这样通过一个循环+移位可以实现对uint类型每个8位的统计,这个方式只适用于无类型int,也就是正数,如果用于负数需要对首位进行特殊处理。

go程序设计语言4.1节的练习1 使用这个方式也可以实现。

package mainimport ("crypto/sha256""fmt"
)// pc 为0~255数字中位的个数统计
var pc [256]bytefunc init() {for i, _ := range pc {pc[i] = pc[i/2] + byte(i&1)}
}func main() {c1 := sha256.Sum256([]byte("x"))fmt.Printf("result:%d\n", popCount(c1))
}func popCount(sha [32]byte) int {sum := 0for _, value := range sha {sum += int(pc[value])}return sum
}

go程序设计语言学习 popCount相关推荐

  1. C++程序设计语言学习笔记:名字空间

    1.名字空间(namespace)的概念用来直接表示本属一体的一组特性,例如库代码.名字空间的成员都位于相同的作用域中,无需特殊符号即可相互访问,而从名字空间外访问它们就需要显式符号. 2.显式限定: ...

  2. 编程语言python怎么读-Python入门学习的计算机程序设计语言是怎样的?

    原标题:Python入门学习的计算机程序设计语言是怎样的? 你可能已经听说过很多种流行编程语言,比如非常难学的C语言,非常流行的Java语言,适合初学者的Basic语言,适合网页编程的Java语言.那 ...

  3. c++学习书籍推荐《C++程序设计语言(特别版)》下载

    百度云及其他网盘下载地址:点我 编辑推荐 <C++程序设计语言(特别版•十周年中文纪念版)>编辑推荐:十周年纪念版,体味C++语言的精妙与魅力,享受与大师的心灵对话.1979年,Biarn ...

  4. 嵌入式系统设计师学习笔记二十八:嵌入式程序设计③——高级程序设计语言

    嵌入式系统设计师学习笔记二十八:嵌入式程序设计③--高级程序设计语言 解释程序和编译程序 编译器的工作阶段示意图 语法错误:非法字符,关键字或标识符拼写错误 语法错误:语法结构出错,if--endif ...

  5. 【C语言学习笔记】《C程序设计语言》读后感

    Warning: 为了避免非零基础人群感到身体不适.头晕恶心.易怒及粗口,请不要查看以下内容. 文章目录 前言 读书感悟 总结 前言 截至目前为止,我已经"抄"完了10篇<C ...

  6. C语言程序设计第三版崔武子,清华大学出版社-图书详情-《C语言程序设计教程学习辅导》...

    C语言是国内外广泛使用的计算机高级语言.大多数高校都开设了"C语言程序设计"课程.作者于1991年编著了<C程序设计>,由清华大学出版社出版,该书出版后,受到了广大读者 ...

  7. 用C语言编写从A到Z随机步法,实用C语言程序设计教程1C语言学习基础ppt71.ppt

    实用C语言程序设计教程1C语言学习基础ppt71 C语言程序设计 - 第1章 C语言学习基础 第1章 开篇 --C语言学习基础 --目标既不是精确的,也不是预先设定的,目标应是一般性的.生成性的,从而 ...

  8. led c语言程序结设计,《C语言程序设计》学习领域课程标准-LED照明工程设计.doc...

    <C语言程序设计>学习领域课程标准-LED照明工程设计.doc <C语言程序设计>课程标准 课程类别 专业核心课程 开课部门 电子信息工程系 总学时 64 学时 学分 4学分 ...

  9. C语言程序设计入门学习六步曲,六步带你入门C语言

    C语言是面向过程的,而C++是面向对象的 C和C++的区别:         C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理 ...

  10. 编译原理学习笔记2——高级程序设计语言概述

    编译原理学习笔记2--高级程序设计语言概述 2.1常用的高级程序设计语言 2.2程序设计语言的定义 2.2.1语法 2.2.1语法 2.2.3程序语言的基本功能和层次机构 2.2.4程序语言成分的逻辑 ...

最新文章

  1. oracle sql 输出,将数据从Oracle SQL Developer导出到Excel .xlsx
  2. java puzzlers英文版_java puzzlers [更新至14.04.03]
  3. mysql之配置使其可用python远程控制
  4. 人工智能-动物识别专家系统(pyqt5)
  5. 定义一个工资变量c语言,《工资管理》c语言程序设计.doc
  6. 虚拟机安装和激活ros5.25软路由
  7. c语言if大括号的作用,c语言if语句 用法是什么
  8. form表单Get方式提交时,action中带参数传递不了
  9. 像个黑客一样在网络上来无影去无踪之IP代理理论篇
  10. Day050--jQuery表单事件 轮播图 插件库 ajax
  11. 物联网入门教程【中】
  12. 剑灵M双端一键端开服端
  13. 带通采样(欠采样)原理以及其在ADC中下变频的应用
  14. 标准std::string分割字符串split
  15. 《吻别》英文版《Take me to your heart》
  16. 超详细MP4格式分析
  17. 【Python与SEO】搜狗微信搜索下拉框词采集多线程/异步采集源码公布
  18. 使用while loop 构建BVH,遍历BVH (1)
  19. kinlde笔记导出+想法|有手就行|20行代码python小程序
  20. ioc和aop的原理面试

热门文章

  1. 百度硬盘搜索插件开发指南(摘自百度)
  2. 沸点百度文库下载器v2.3.3.2绿色版
  3. 读《C专家编程》笔记-关于内存泄漏
  4. 小米抢购软件_「晓满晓满晓」今日科技新鲜事:小米11、鸿蒙os、摩拜单车
  5. 添加几行代码实现百度文库的复制
  6. JS中clientHeight、scrollHeight、offsetHeight、scrollTop、offsetTop的定义
  7. 2022年6月25日PMP考试通关宝典-3
  8. 搜狗输入法linux词库导入,搜狗输入法词库导入详解
  9. 公务员Python培训
  10. 笨方法学Python笔记(5)