统计二进制中比特1的个数
快速统计比特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的个数相关推荐
- php实现 统计输入中各种字符的个数
php实现 统计输入中各种字符的个数 一.总结 一句话总结:谋而后动,想清楚,会非常节约编写代码的时间. 1.对结果可能是0的变量,记得初始化? 4 $len=0; 5 $len=strlen($st ...
- 统计字符串中某个字符的个数
1 <!DOCTYPE html> 2 <html> 3 <body> 4 <title>统计字符串中某个字符的个数</title> 5 & ...
- 统计字符串中个字符的个数
昨天有朋友去华赛面试,当场考了一个统计字符串中个字符的个数的编程题.我在网上找了下,写的都很扯淡的,至少用C语言的很扯淡的,很多人都只局限于统计字母的个数了.自己也写了一段代码,估计着如果字符串很长而 ...
- C语言:统计句子中元音字母的个数
统计句子中元音字母的个数 (30 分) 输入一个英文句子,已知:第一个字符是大写,其它字符都是小写,句子以 . 结束. 判断首字母是否为元音字母,并统计句子中元音字母(a.e.i.o.u)的个数,若首 ...
- 统计碱基序列中ATCG出现的个数
统计碱基序列中ATCG出现的个数 题目 Given: A DNA string "s" of length at most 1000 nt. Return: Four intege ...
- 统计字符串中每个字符的个数。(原始字符串是:“aabccdeefff”,结果是:a2 b1 c2 d1 e2 f3)
思想:将给定的字符串转为数组,对数组去重,再将去重后的数组对原字符串进行遍历,遇到相同的元素就将字母后面的数字+1,最终返回一个数组(也可以转换成字符串). <!DOCTYPE html> ...
- 本题要求实现一个统计整数中指定数字的个数的简单函数。
本题要求实现一个统计整数中指定数字的个数的简单函数. 函数接口定义: int CountDigit( int number, int digit ); 其中number是不超过长整型的整数,digit ...
- JavaScript中统计数组中相同元素的个数-案例
图示说明 代码 //部分数据 ["220","220","220","220","220",&quo ...
- 统计表格中某项的个数(COUNTIF)
统计表格中某项的个数 =COUNTIF(AO4:AO184,"镟") =COUNTIF(C228:AG228,"临") 注:绿色表格内为(AO4:AO184)中 ...
最新文章
- c语言计算M=11 22 33,四川计算机C语言考试笔试真题33次..doc
- arial字体可以商用吗_每次做PPT都不知该怎么选字体?6种万能字体搭配组合送你...
- 疫情之下!国内互联网公司上班时间汇总!
- 华为卡槽打不开怎么办_又牛又贵!华为5G折叠屏手机惊艳全球,售价1.75万!网友却讨论......
- react-native 集成极光推送jpush-react-native时的小问题
- 【Python】25个好用到爆的一行Python代码,建议收藏
- 面经——Java基础
- 从Java 11中删除的API
- 【渝粤题库】广东开放大学 计算机应用基础(本) 形成性考核
- HttpClient通过Post方式发送Json数据
- junit跳过datasource_maven – spring集成测试无法加载上下文“另一个资源已存在,名称为dataSource”...
- python的string模块
- iPhone 11运存、电池确定!5499元值得买吗?
- 受Struts2漏洞影响 思科正审查其主要产品安全性 CVE-2017-9805已有主动攻击
- 欧空局2018机器学习系列课程发布:从概念到实践(视频+PPT)
- php time豪秒_PHP精确到毫秒秒杀倒计时实例详解
- java设计模式(五)--建造者模式(Builder)
- Linux向文件中写入内容
- 转载--Ajax学习---DOM进行Web响应
- Ajax 加载数据 练习 自我有些迷糊了,写的大概请谅解 ^ _ ^