C语言中的位运算(学习来自剑指offer)
来源:互联网 发布:js 深度复制对象 编辑:程序博客网 时间:2024/05/22 07:53
1.二进制中1的个数
请实现一个函数,输入一个整数,输出该数的二进制表示中1的个数,
int NumBerOf1(int n)
{
int count = 0;
while(n)
{
if(n&1)
count++;
n = n>>1;
}
return count;
}
讨论上面代码的正确性,移位操作,当对一个正数右移的时候,补充的是0,但是当对一个负数进行移位的时候,从左侧开始补充的是符号位也就是1
当n为正数的时候,代码可以正确得出结果,但是,当输入的n是个负数则n最后可能变成0xFFFFFFFFF,使while陷入死循环。
2.int NumBerOf1(int n)
{
int cont = 0;
unsigned int flag = 1;
while(flag)
{
if(n & flag)
count++;
flag = flag << 1;
}
return count;
}
在这个算法中,循环的次数等于n中二进制的位数,二进制位数有几位那么就循环几次,flag逐渐向左移位,测试整数二进制情况下的所有位是否为一。
3.由第二种算法进行分析,是否可以直接只循环1的个数次,即当二进制位为0的时候不去进行循环,只有当当前的二进制位为1 的时候才进行循环,
int NumberOf1(int n)
{
int count = 0;
while(n)
{
++count;
n = (n-1) & n;
}
}
第三种算法主要运用了二进制转换中的一个知识点,
把一个数减去1与自己本身相与那么二进制形式下最右侧的1变成0
此时进行第三种算法中的while循环的时候,每次都把二进制中的一个1变成0按照这种方式进行递归,最终二进制中1都变成了0.
- C语言中的位运算(学习来自剑指offer)
- C语言中的位运算
- C语言中的位运算
- C语言中的位运算
- C语言中的位运算
- C语言中的位运算
- C语言中的位运算
- C语言中的位运算
- C语言中的位运算
- C语言中的位运算
- C语言中的位运算
- C语言中的位运算
- C语言中的位运算
- C 语言中的 位运算
- C语言中的位运算
- C语言中的位运算& ^ |
- C语言中的位运算
- C语言中的位运算
- Hadoop的概括
- POJ 1679 The Unique MST
- 如何用Java判断网页编码
- 创意手机APP汇总
- main函数前后
- C语言中的位运算(学习来自剑指offer)
- ubuntu14.04安装ns3(3.20)仿真平台
- Streamfully,将一切链接可视化
- zend frameword2详细的入门教程
- LeetCode OJ - Length of Last Word
- rar文件Combres对JS、css打包压缩的组件使用
- Java Serializable(序列化)的理解和总结、具体实现过程
- 网站的推广一点总结
- 0欧电阻作用