编程之美2.1——二进制中1的个数
来源:互联网 发布:欧文生涯数据 编辑:程序博客网 时间:2024/04/29 18:02
1.二进制中1的个数
int NumberOf_1(int n) { int count = 0; while(n) { count++; n = n & (n - 1); } return count; }
2.一个数是否是2的N次方
int Is_2N(int n) { int tmp = n & (n-1); if(tmp == 0) return 1; else return 0; }
3.两个数m和n,改变m中二进制表示中的多少位才能得到n
//(1)求这两个数的异或(两个数不同的位置都为1,这些位置都需要改变)
//
//(2)统计异或结果中1的个数
int StepChangeTo(int m, int n) { int tmp = m ^ n; return NumberOf_1(tmp); }
4.不用+-*/求两数的和
int Add(int num1, int num2) { int sum, carry; do { sum = num1 ^ num2; carry = (num1 & num2) << 1; //进位,两个数只有在某个位置都为1才有进位 num1 = sum; num2 = carry; }while(num2 != 0); return num1; }
5.求N!的二进制表示中最低位的1的位置
//从右向左从1 数起
//
//一个数的二进制表示中如果最后是m个0,则这个数有m个质因数2,如36的二进制表示为
//
//100100,它最后有2个0,36=2*2*9,可以看到有2个2,则最低位的1,只比质因数2的个
//
//数多一个,它在第2+1=3位
//
//题目转化为求N!中含有质因数的个数,等于[N/2]+[N/4]+[N/8]+[N/16]+...
//
//[N/2]表示不大于N的数中所有2的倍数贡献一个2
int lowestOne(int N) { int result = 0; while(N) { N >>= 1; //(N /= 2) result += N; } return result; }
- 编程之美2.1 求二进制中1的个数
- 【编程之美】2.1求二进制中1的个数
- 编程之美2.1 求二进制中1的个数
- 编程之美 2.1 求二进制中1的个数
- 《编程之美》2.1 求二进制中1的个数
- 2.1《编程之美》读书笔记——“求二进制数中1的个数”
- 编程之美2.1——二进制中1的个数
- 编程之美2.1——求二进制树中1的个数
- 《编程之美》学习笔记——2.1求二进制中1的个数
- 编程之美2.1——求二进制数中1的个数
- 编程之美读书笔记2.1—求二进制数中1的个数
- 编程之美之二进制数中1的个数
- 编程之美之求二进制中1的个数
- 编程之美1——一个数的二进制表示中1的个数
- 《编程之美》读书笔记——“求二进制数中1的个数”
- 求二进制数中1的个数——《编程之美》
- 编程之美——求二进制数中1的个数
- 《编程之美》读书笔记(二)——二进制数中“1”的个数
- 编程之美2.2——不要被阶乘吓倒
- 交易员学堂第二课 一动感情,你就输了
- 多线程服务器的常用编程模型
- 微型机 cpu发展
- uva 120 - Stacks of Flapjacks
- 编程之美2.1——二进制中1的个数
- hdu 1542 Atlantis 二维线段树
- 【PB】多表更新
- 参数曲线
- 等待是智慧
- 宕机,回档,亡羊补牢之外我们是不是应该做些什么 .
- C++strcmp用法
- C++strcmp用法
- Unable to boot – please use a kernel appropriate for your CPU.