一个简单的计数
来源:互联网 发布:在u盘上装ubuntu 编辑:程序博客网 时间:2024/04/29 02:18
从数据结构这本书看到的,思路很巧妙啊。
题目的要求是计算一个数化为二进制数后,求这个二进制数1的个数。这个方法是复杂度为log2W的,其中W=O( log2 n),是整数的位宽。
#define POW(c) = 1 << c//1左移C位,是2^c
#define Mask(c) (((unsigned long ) -1 ) / (pow(pow(c))+1))//这个是用来分则的,以2^c为单位分组。效果是这样的
MASK(0)=01010101010101010101010101010101 //2个为一组
MASK(1)=00110011001100110011001100110011 //4个为一组
MASK(3)=00000000111111110000000011111111 //8个为一组
int countOnes2(unsigned int n){
n = ROUND(n,0);
n = ROUND(n,1);n = ROUND(n,2);
n = ROUND(n,3);
n = ROUND(n,4);
}这样就可以了。原理就是
、
图是盗用的。。。
随便一个数
11001010
一开始
11001010 &
01010101 =
01000000.
之后右移一位
01100101 &
01010101 =
01000101.相加
10000101 &
00110011 =
00000001.右移一位
01000010 &
00110011 =
00000010相加
00000011&
00001111=
00000011右移一位
00000001&
00001111
00000001
相加得00000100 = 4总共四个1.
以2^c为单位分组,之后移位相加,得到的和就地储存。
0 0
- 一个简单的计数
- 一个简单的引用计数实现体类
- 一个简单的C++内存管理与引用计数指针
- 简单的计数排序
- 简单的计数排序
- 简单的投票计数软件
- hdoj2151简单的计数DP
- 计数排序的简单实现
- luatinker 的一个计数 BUG
- C++如何使用简单的引用计数
- 简单的计数智能指针实现
- 简单的模拟多线程引用计数原理
- 简单的模拟多线程引用计数原理
- 简单矩阵 数据个数的计数
- tabhost实现计数标签的简单用法
- 使用scala实现wordcount的简单计数
- 一个带停止按钮的计数时钟
- 简单的Tensoflow(2):实现简单的循环计数
- Java并发编程-25-合并任务的结果
- mysql的唯一索引UNIQUE
- JVM调优总结
- 如有手机数据备份,悲剧不会发生
- 通过SSH 密钥连接GitHub/Bitbucket
- 一个简单的计数
- Python 3程序开发指南(第2版 修订版)笔记
- 【Unity3d】如何解决错误:A script behaviour has a different serialization layout when loading
- leetcode--UniqueBinarySearchTreesII
- android viewpager outofmemery问题解决
- ganglia在hadoop中的配置:hadoop-metrics2.properties 以及各监控项含义
- linux jdk 安装总结
- linux 上配置svn
- 进程、线程同步互斥学习 —— 临界区