快速统计比特1的数量

int CountBitOnes(int32_t n) {int result = 0;for(;n;++result) {n &= n-1;}return result;
}

原理很简单,n-1会将n中最靠近结尾的1减一,这样n&n-1,n中最靠近结尾的1就变成了0;
假设n = 0b xxxxxxxx 100
n - 1 = 0b xxxxxxxx 011
n&n-1= 0b xxxxxxxx 000

这样从后往前,依次将1置为0同时result+1,最终n为0时,得出result表示共有多少个1。

正数和负数的区别

众所周知,计算机存储数据是以补码的方式,那么正数的补码和原码相同可以得到正确的比特数,如:

n = 10
二进制表示:0000000000000000000000000000 1010
计算得到result = 2

负数由于是补码,计算得到的只能是补码的比特数,如:

n = -10
原码表示: 1000000000000000000000000000 1010
补码表示:11111111111111111111111111110110
由于计算机存储补码,计算result = 30

结论:

  • 通过这种方式计算非常快,最差时间复杂度为o(n),且仅有减法和与操作这种简单的操作。

  • 正数可以得到正确的比特1的数量,负数得到的是补码的比特1的数量。

统计二进制中比特1的个数相关推荐

  1. php实现 统计输入中各种字符的个数

    php实现 统计输入中各种字符的个数 一.总结 一句话总结:谋而后动,想清楚,会非常节约编写代码的时间. 1.对结果可能是0的变量,记得初始化? 4 $len=0; 5 $len=strlen($st ...

  2. 统计字符串中某个字符的个数

    1 <!DOCTYPE html> 2 <html> 3 <body> 4 <title>统计字符串中某个字符的个数</title> 5 & ...

  3. 统计字符串中个字符的个数

    昨天有朋友去华赛面试,当场考了一个统计字符串中个字符的个数的编程题.我在网上找了下,写的都很扯淡的,至少用C语言的很扯淡的,很多人都只局限于统计字母的个数了.自己也写了一段代码,估计着如果字符串很长而 ...

  4. C语言:统计句子中元音字母的个数

    统计句子中元音字母的个数 (30 分) 输入一个英文句子,已知:第一个字符是大写,其它字符都是小写,句子以 . 结束. 判断首字母是否为元音字母,并统计句子中元音字母(a.e.i.o.u)的个数,若首 ...

  5. 统计碱基序列中ATCG出现的个数

    统计碱基序列中ATCG出现的个数 题目 Given: A DNA string "s" of length at most 1000 nt. Return: Four intege ...

  6. 统计字符串中每个字符的个数。(原始字符串是:“aabccdeefff”,结果是:a2 b1 c2 d1 e2 f3)

    思想:将给定的字符串转为数组,对数组去重,再将去重后的数组对原字符串进行遍历,遇到相同的元素就将字母后面的数字+1,最终返回一个数组(也可以转换成字符串). <!DOCTYPE html> ...

  7. 本题要求实现一个统计整数中指定数字的个数的简单函数。

    本题要求实现一个统计整数中指定数字的个数的简单函数. 函数接口定义: int CountDigit( int number, int digit ); 其中number是不超过长整型的整数,digit ...

  8. JavaScript中统计数组中相同元素的个数-案例

    图示说明 代码 //部分数据 ["220","220","220","220","220",&quo ...

  9. 统计表格中某项的个数(COUNTIF)

    统计表格中某项的个数 =COUNTIF(AO4:AO184,"镟") =COUNTIF(C228:AG228,"临") 注:绿色表格内为(AO4:AO184)中 ...

最新文章

  1. c语言计算M=11 22 33,四川计算机C语言考试笔试真题33次..doc
  2. arial字体可以商用吗_每次做PPT都不知该怎么选字体?6种万能字体搭配组合送你...
  3. 疫情之下!国内互联网公司上班时间汇总!
  4. 华为卡槽打不开怎么办_又牛又贵!华为5G折叠屏手机惊艳全球,售价1.75万!网友却讨论......
  5. react-native 集成极光推送jpush-react-native时的小问题
  6. 【Python】25个好用到爆的一行Python代码,建议收藏
  7. 面经——Java基础
  8. 从Java 11中删除的API
  9. 【渝粤题库】广东开放大学 计算机应用基础(本) 形成性考核
  10. HttpClient通过Post方式发送Json数据
  11. junit跳过datasource_maven – spring集成测试无法加载上下文“另一个资源已存在,名称为dataSource”...
  12. python的string模块
  13. iPhone 11运存、电池确定!5499元值得买吗?
  14. 受Struts2漏洞影响 思科正审查其主要产品安全性 CVE-2017-9805已有主动攻击
  15. 欧空局2018机器学习系列课程发布:从概念到实践(视频+PPT)
  16. php time豪秒_PHP精确到毫秒秒杀倒计时实例详解
  17. java设计模式(五)--建造者模式(Builder)
  18. Linux向文件中写入内容
  19. 转载--Ajax学习---DOM进行Web响应
  20. Ajax 加载数据 练习 自我有些迷糊了,写的大概请谅解 ^ _ ^

热门文章

  1. 微信小程序 keyboard-accessory组件
  2. 计算机视觉之目标检测一之SSD
  3. 408数据结构学习笔记——顺序查找、折半查找、分块查找
  4. 我的世界java版存档转基岩版_我的世界基岩版与java版存档互转
  5. android开发百度地图定位到几内亚湾问题的解决
  6. 好学6招快速减大象腿
  7. Qt实现表格控件-支持多级列表头、多级行表头、单元格合并、字体设置等
  8. P2中ZYNQ的PS控制PL端LED
  9. 探秘2022亚运会主场馆丨“大小莲花”智慧升级,带你见证科技力量
  10. Thinkpad W530 笔记本关机后耗电问题