8、二进制中1的个数------------>剑指offer系列
2024-09-08 10:46:33
题目
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
法一:分析
这是一道考察二进制的题目
二进制或运算符(or)
:符号为|,表示若两个二进制位都为0
,则结果为0
,否则为1
。
二进制与运算符(and)
:符号为&,表示若两个二进制位都为1
,则结果为1
,否则为0
。
二进制否运算符(not)
:符号为~,表示对一个二进制位取反。
异或运算符(xor)
:符号为^,表示若两个二进制位不相同,则结果为1,否则为0
左移运算符m << n
表示把m左移n位,左移n位的时候,最左边的n位将被丢弃,同时在最右边补上n
个0
,比如:
00001010<<2 = 00101000
右移运算符m >> n
表示把m
右移n
位,右移n
位的时候,最右边的n位将被丢弃,同时在最左边补上n
个0
,比如:
00001010>>2 = 00000010
我们可以让目标数字和一个数字做与运算
这个用户比较的数字必须只有一位是1
其他位是0
,这样就可以知道目标数字的这一位是否为0
。
所以用于比较的这个数字初始值为1
,比较完后让1
左移1
位,这样就可以依次比较所有位是否为1
。
代码
function NumberOf1(n)
{
let flag = 1;
let count = 0;
while(flag){
if(flag & n){
count++;
}
flag = flag << 1;
}
return count;
}
法二:分析
最新文章
- [MSSQL2008]Spatial Data in SQL Server 2008 - 根据经纬度计算两点间距离
- HDU 2083 简易版之最短距离 --- 水题
- JSBinding + SharpKit / 需要注意及不支持的列表
- int、bigint、smallint 和 tinyint
- oracle编译 失效对象方式
- reaver使用相关
- 基于opencv在摄像头ubuntu根据视频获取
- 使用VMware Workstation Pro 12 虚拟机安装Mac OS系统教程 全程图解
- mybatis逆向工程之配置
- Python---socketserver
- unity案例入门(二)(坦克大战)
- SQL使用之关联更新、批量插入
- altera DDR2 IP核之仿真
- python 实现rsa 的加密解密存读取(PEM格式证书)【转发】
- DBeaver连接Oracle11g数据库
- 杂谈:Windows操作系统的介绍与对Win8操作系统市场反响冷淡原因的分析
- Slickflow.NET 开源工作流引擎高级开发(三) -- 并行分支容器与会签工作流模式的组合
- Redis客户端连接
- [SublimeText] 如何创建工程
- Buaaclubs的NABC与发布