go程序设计语言学习 popCount
位运算统计二进制位为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相关推荐
- C++程序设计语言学习笔记:名字空间
1.名字空间(namespace)的概念用来直接表示本属一体的一组特性,例如库代码.名字空间的成员都位于相同的作用域中,无需特殊符号即可相互访问,而从名字空间外访问它们就需要显式符号. 2.显式限定: ...
- 编程语言python怎么读-Python入门学习的计算机程序设计语言是怎样的?
原标题:Python入门学习的计算机程序设计语言是怎样的? 你可能已经听说过很多种流行编程语言,比如非常难学的C语言,非常流行的Java语言,适合初学者的Basic语言,适合网页编程的Java语言.那 ...
- c++学习书籍推荐《C++程序设计语言(特别版)》下载
百度云及其他网盘下载地址:点我 编辑推荐 <C++程序设计语言(特别版•十周年中文纪念版)>编辑推荐:十周年纪念版,体味C++语言的精妙与魅力,享受与大师的心灵对话.1979年,Biarn ...
- 嵌入式系统设计师学习笔记二十八:嵌入式程序设计③——高级程序设计语言
嵌入式系统设计师学习笔记二十八:嵌入式程序设计③--高级程序设计语言 解释程序和编译程序 编译器的工作阶段示意图 语法错误:非法字符,关键字或标识符拼写错误 语法错误:语法结构出错,if--endif ...
- 【C语言学习笔记】《C程序设计语言》读后感
Warning: 为了避免非零基础人群感到身体不适.头晕恶心.易怒及粗口,请不要查看以下内容. 文章目录 前言 读书感悟 总结 前言 截至目前为止,我已经"抄"完了10篇<C ...
- C语言程序设计第三版崔武子,清华大学出版社-图书详情-《C语言程序设计教程学习辅导》...
C语言是国内外广泛使用的计算机高级语言.大多数高校都开设了"C语言程序设计"课程.作者于1991年编著了<C程序设计>,由清华大学出版社出版,该书出版后,受到了广大读者 ...
- 用C语言编写从A到Z随机步法,实用C语言程序设计教程1C语言学习基础ppt71.ppt
实用C语言程序设计教程1C语言学习基础ppt71 C语言程序设计 - 第1章 C语言学习基础 第1章 开篇 --C语言学习基础 --目标既不是精确的,也不是预先设定的,目标应是一般性的.生成性的,从而 ...
- led c语言程序结设计,《C语言程序设计》学习领域课程标准-LED照明工程设计.doc...
<C语言程序设计>学习领域课程标准-LED照明工程设计.doc <C语言程序设计>课程标准 课程类别 专业核心课程 开课部门 电子信息工程系 总学时 64 学时 学分 4学分 ...
- C语言程序设计入门学习六步曲,六步带你入门C语言
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理 ...
- 编译原理学习笔记2——高级程序设计语言概述
编译原理学习笔记2--高级程序设计语言概述 2.1常用的高级程序设计语言 2.2程序设计语言的定义 2.2.1语法 2.2.1语法 2.2.3程序语言的基本功能和层次机构 2.2.4程序语言成分的逻辑 ...
最新文章
- oracle sql 输出,将数据从Oracle SQL Developer导出到Excel .xlsx
- java puzzlers英文版_java puzzlers [更新至14.04.03]
- mysql之配置使其可用python远程控制
- 人工智能-动物识别专家系统(pyqt5)
- 定义一个工资变量c语言,《工资管理》c语言程序设计.doc
- 虚拟机安装和激活ros5.25软路由
- c语言if大括号的作用,c语言if语句 用法是什么
- form表单Get方式提交时,action中带参数传递不了
- 像个黑客一样在网络上来无影去无踪之IP代理理论篇
- Day050--jQuery表单事件 轮播图 插件库 ajax
- 物联网入门教程【中】
- 剑灵M双端一键端开服端
- 带通采样(欠采样)原理以及其在ADC中下变频的应用
- 标准std::string分割字符串split
- 《吻别》英文版《Take me to your heart》
- 超详细MP4格式分析
- 【Python与SEO】搜狗微信搜索下拉框词采集多线程/异步采集源码公布
- 使用while loop 构建BVH,遍历BVH (1)
- kinlde笔记导出+想法|有手就行|20行代码python小程序
- ioc和aop的原理面试
热门文章
- 百度硬盘搜索插件开发指南(摘自百度)
- 沸点百度文库下载器v2.3.3.2绿色版
- 读《C专家编程》笔记-关于内存泄漏
- 小米抢购软件_「晓满晓满晓」今日科技新鲜事:小米11、鸿蒙os、摩拜单车
- 添加几行代码实现百度文库的复制
- JS中clientHeight、scrollHeight、offsetHeight、scrollTop、offsetTop的定义
- 2022年6月25日PMP考试通关宝典-3
- 搜狗输入法linux词库导入,搜狗输入法词库导入详解
- 公务员Python培训
- 笨方法学Python笔记(5)