011一个整数的二进制中1的个数

本文介绍了一种高效算法,用于计算给定整数在其二进制表示中1的个数。通过使用位操作技巧,避免了传统方法的效率瓶颈,实现了快速准确的计算。

题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

第一种解法:利用java的Integer吧整数转换为字符数组,遍历数组查找
第二种解法: 整数和自身减1相与,会把该数最高位为1的数变为0,计算1的个数就可以了

public class Solution {
    public int NumberOf1(int n) {
    	int ans = 0;
    	while(n != 0){
    		ans++;
    		n = n & (n-1);
    	}
        return ans;

    }
}
这个是完整源码 python实现 Flask,Vue 【python毕业设计】基于Python的Flask+Vue物业管理系统 源码+论文+sql脚本 完整版 数据库是mysql 本文首先实现了基于Python的Flask+Vue物业管理系统技术的发展随后依照传统的软件开发流程,最先为系统挑选适用的言语和软件开发平台,依据需求分析开展控制模块制做和数据库查询构造设计,随后依据系统整体功能模块的设计,制作系统的功能模块图、E-R图。随后,设计框架,依据设计的框架撰写编码,完成系统的每个功能模块。最终,对基本系统开展了检测,包含软件性能测试、单元测试和性能指标。测试结果表明,该系统能够实现所需的功能,运行状况尚可并无明显缺点。本文首先实现了基于Python的Flask+Vue物业管理系统技术的发展随后依照传统的软件开发流程,最先为系统挑选适用的言语和软件开发平台,依据需求分析开展控制模块制做和数据库查询构造设计,随后依据系统整体功能模块的设计,制作系统的功能模块图、E-R图。随后,设计框架,依据设计的框架撰写编码,完成系统的每个功能模块。最终,对基本系统开展了检测,包含软件性能测试、单元测试和性能指标。测试结果表明,该系统能够实现所需的功能,运行状况尚可并无明显缺点。本文首先实现了基于Python的Flask+Vue物业管理系统技术的发展随后依照传统的软件开发流程,最先为系统挑选适用的言语和软件开发平台,依据需求分析开展控制模块制做和数据库查询构造设计,随后依据系统整体功能模块的设计,制作系统的功能模块图、E-R图。随后,设计框架,依据设计的框架撰写编码,完成系统的每个功能模块。最终,对基本系统开展了检测,包含软件性能测试、单元测试和性能指标。测试结果表明,该系统能够实现所需的功能,运行状况尚可并无明显缺点。本文首先实现了基于Python的Flask+Vue物业管理系统技术的发
源码地址: https://pan.quark.cn/s/a4b39357ea24 # SerialAssistant串口助手 下载地址: 本仓库release文件夹 在线下载:http://mculover666.cn/SerialAssistant.zip 功能说明 本项目是使用C# + WinForm框架编写的串口助手。 目前版本为2.0.0版本,拥有以下功能: 未打开串口时,自动扫描可用端口 接收数据支持文本或者HEX方式显示 支持接收数据加入时间戳 支持将当前接收数据保存为文件 支持发送文本数据或HEX数据 支持自动定时发送数据 支持从文件中(.txt, .json)加载数据到发送文本框 支持发送数据记录(不重复记录) ……欢迎加入更多功能 环境说明 VS2019 .NET Framework 4.5 教程 C#上位机开发(一)—— 了解上位机 C#上位机开发(二)—— Hello,World C#上位机开发(三)—— 构建SerialAssistant雏形 C#上位机开发(四)—— SerialAssistant功能完善 C#上位机开发(五)——SerialAssistant界面升级(WinForm界面布局进阶) C#上位机开发(六)——SerialAssistant功能优化(串口自动扫描功能、接收数据保存功能、加载发送文件、发送历史记录、打开浏览器功能、定时发送功能) C#上位机开发(七)—— 修改窗口图标和exe文件图标 C#上位机开发(八)—— 美化界面(给按钮添加背景) 更新日志 2018/6/3 完成串口属性设置,打开与关闭异常处理; 字符串发送功能; 字符串接收功能; 2018/6/4 完善串口扩展功能界面部分 2018/6/6 完善...
### 计算整数二进制表示1的数量 对于计算整数在其二进制形式中有多少个`1`,存在多种方法可以实现这一目标。下面介绍几种常见的算法。 #### 取余法 通过不断对给定数值除以2并检查其余数是否为1来统计二进制位上的1的数目。这种方法简单直观但效率较低,因为每次迭代都需要执行一次除法操作[^4]。 ```python def count_binary_ones_remainder(num): count = 0 while num != 0: remainder = num % 2 if remainder == 1: count += 1 num //= 2 return count ``` #### 移位法 利用按位右移运算符逐步处理每一位直到所有的比特都被访问过为止。此方式同样适用于正负整数,在某些情况下可能比取模更高效一些[^3]。 ```c++ #include <iostream> using namespace std; int main() { int value; cin >> value; unsigned int uValue = static_cast<unsigned int>(value); int count = 0; for (unsigned int i = 0; i < sizeof(int)*8 ; ++i){ if((uValue>>i)&1) count++; } cout << "count=" << count << endl; } ``` #### 高级计算法——Brian Kernighan’s Algorithm 这是一种更为高效的解决方案,它基于这样一个事实:当我们将一个数字与其减去一的结果做按位与(&&)时会清除掉最右边的那个'1'。因此只要这个过程不返回零就可以持续减少原值直至其变为零,并在此过程中计数被清除了几次即可得到最终结果[^5]。 ```cpp // C++ implementation of Brian Kernighan's algorithm to find the number of set bits in an integer. int countSetBits(unsigned int n) { int count = 0; while(n){ n &= (n-1); // Clearing the least significant bit set count++; } return count; } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值