神奇的位运算——二进制中1的个数
来源:互联网 发布:js常见的关键字直接量 编辑:程序博客网 时间:2024/05/17 23:21
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
方法1:依次右移,使最右侧的1依次消失。但需要注意负数右移后会在高位补1,需要将负数转换为无符号数。
int NumberOf1(int n)
{
int cnt = 0;
unsigned ui = (unsigned)n; //转换为无符号数
while (ui!=0)
{
int a = ui & 1; //与1做位与运算
if (a == 1) //最后一位为1
cnt++;
ui = ui >> 1; //右移
}
return cnt;
}
方法2:与n-1相与,同样可以使最右侧的1消失。n-1可以从最右侧的一个1开始,让所有位取反。n&(n-1)后可以让最右侧的1消失。
int NumberOf1(int n)
{
int cnt = 0;
while (n!=0)
{
n = n&(n - 1);
cnt++;
}
return cnt;
}
阅读全文
0 0
- 神奇的位运算——二进制中1的个数
- 位运算:二进制中1的个数
- 二进制中1的个数----位运算
- 位运算------二进制中1的个数
- 二进制数中1的个数,位运算的境界
- 【剑指offer】2.4.3位运算——面试题10:二进制中1的个数
- 位运算——二进制中1的个数相关题目
- 剑指offer——面试题10:位运算之二进制中1的个数
- 《剑指Offer》位运算——求二进制数中1的个数
- 二进制中1的个数(java)——位运算
- 第1天 位运算-二进制中1的个数
- 统计二进制中1的个数和 - 位运算
- 剑指offer: 二进制中1的个数(位运算)
- 【剑指Offer】二进制中1的个数(位运算)
- 位运算之二进制中1的个数
- 位运算:二进制中1的个数12
- 位运算(一):二进制中1的个数
- 位运算--求一个 数二进制中1的个数
- 基于ORA-12170 TNS 连接超时解决办法详解
- activiti部署流程中文乱码解决方法
- redis 在备份报错修改vm.overcommit_memory
- 搭建局域网git仓库
- C# 防SQL注入,SQL参数化
- 神奇的位运算——二进制中1的个数
- Sonar简介及使用
- [Python]磁盘调度算法FCFS,SSTF,SCAN,CSCAN
- RN不能在安卓端运行
- Dockerfile Demo
- 基数排序
- 【修改anchor】目标检测框架py-faster-rcnn修改anchor_box
- 电话本动态实现
- 【Node.js】安装使用nvm管理nodejs版本