有关面试中常见位运算总结
来源:互联网 发布:淘宝最近没生意 编辑:程序博客网 时间:2024/05/22 01:56
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;
}
- 有关面试中常见位运算总结
- 笔试面试中常见的位运算用法
- 有关位运算的基础知识总结
- 常见的位运算用法总结
- 剑指Offer之面试位运算总结
- 编程中 常见的位运算问题
- 笔试面试中涉及位运算的题目总结(一)
- 与位运算有关的算法题思路总结
- C 语言中有关常见的运算符问题
- 常见位运算
- 常见的位运算
- 常见位运算符
- 编程中位运算用法总结
- 编程中位运算用法总结
- 编程中位运算用法总结
- 编程中位运算用法总结
- 有关位运算的笔记
- java中常见的运算总结
- 经十路以西----我的大学最后一抹绚丽的色彩
- Auto Login to PeopleSoft and App Designer
- 二分图
- 谈谈iOS下图像颜色检测、颜色匹配的解决方法
- 有关初始化的一些问题
- 有关面试中常见位运算总结
- postgresql8.4在ubuntu9下的安装与基本配置
- 第十七周实验--任务1--学生成绩处理:保存为二进制文件
- 黑马程序员-内部类好异常
- 牛人博客
- Android 移动网络类型
- makefile教程
- visual studio 2010 sp1 安装出现DotfuscatorCE_5.0.2500.msi 未找到错误!
- cts测试的一些总结