[程序员代码面试指南]位运算-整数的二进制数表达中有多少个1(位运算)

题意

32位有符号整型num,返回该整数二进制数中1的个数。

题解

法一:循环次数等于位数
移位

  • >>>补0右移
  • >>右移(负数时高位补1)

法二:循环次数等于1的个数
num=num&(num-1)抹掉最右边的1

法三:循环次数等于1的个数
num&(~num+1)获得最右边的1

todo

平行算法待搞懂

代码(法一、二、三)


public class Main {
	public static void main(String args[]) {
		int num=5;
		int count=countNum(num);
		System.out.println(count);
	}
	
//	public static int countNum(int num) {
//		int count=0;
//		while(num!=0) {
//			count+=num&1;
//			num=num>>>1;
//		}
//		return count;
//	}
	
//	public static int countNum(int num){
//		int count=0;
//		while(num!=0) {
//			num=num&(num-1);
//			++count;
//		}
//		return count;
//	}
	
	public static int countNum(int num) {
		int count=0;
		while(num!=0) {
			num=num-((~num+1)&num);//
			++count;
		}
		return count;
	}
}

posted on   coding_gaga  阅读(243)  评论(0编辑  收藏  举报

编辑推荐:
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
阅读排行:
· 开发的设计和重构,为开发效率服务
· 从零开始开发一个 MCP Server!
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· Ai满嘴顺口溜,想考研?浪费我几个小时
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示