求二进制位中一的个数

简介: 求二进制位中一的个数

题目内容:

写一个函数返回参数二进制中 1 的个数,负数使用补码表示。

比如: 15    0000 1111    4 个 1

方法一:

#include<stdio.h>
int NumberOf1(unsigned int n)
{
  int count = 0;
  while (n)
  {
    if (n % 2 == 1)
      count++;
    n /= 2;
  }
  return count;
}
int main()
{
  int n;
  scanf("%d", &n);
  int num = NumberOf1(n);
  printf("%d\n", num);
}


NumberOf1函数的实现比较简单,它使用了一个循环,不断将n除以2,并判断余数是否为1。如果余数为1,则说明n的二进制表示中最低位为1,计数器count加1。然后,将n右移1位,继续进行下一轮循环,直到n的二进制表示中所有位都被访问过。最终,函数返回1的个数。


在main函数中,它调用了NumberOf1函数,读入一个整数n,并将它作为参数传递给NumberOf1函数。函数返回的结果被赋值给变量num,并通过printf函数将结果输出到控制台上。


方法二:

#include<stdio.h>
int NumberOf1(int n)
{
  int i = 0, count = 0;
  for (i = 0; i < 32; i++)
  {
    if ((n >> i) & 1 == 1)
      count++;
  }
  return count;
}
int main()
{
  int n;
  scanf("%d", &n);
  int num = NumberOf1(n);
  printf("%d\n", num);
}

NumberOf1函数的实现比较简单,它使用了一个for循环,对于n的二进制表示中的每一位进行检查。首先,将n右移i位,然后使用按位与运算符( &)判断n的第i位是否为1。如果为1,计数器count加1。最后,循环执行完毕后,函数返回统计到的1的个数。


需要注意的是,在统计有符号整数的二进制表示中1的个数时,应该考虑符号位的影响。如果使用带符号位的右移运算符(>>),则符号位将被保留。因此,可以使用无符号位的右移运算符(>>)来消除符号位的影响。此外,在使用按位运算符( &)判断某一位是否为1时,也需要小心处理。


方法三:

#include<stdio.h>
int NumberOf1(int n)
{
  int count = 0;
  while (n)
  {
    n = n & (n - 1);
    count++;
  }
  return count;
}
int main()
{
  int n;
  scanf("%d", &n);
  int num = NumberOf1(n);
  printf("%d\n", num);
}


NumberOf1函数的实现比较巧妙,它使用了一个while循环和一种称为“Brian Kernighan算法”的技巧。循环中,不断对n与(n-1)进行按位与运算,这将会把n中最右边的1变为0。每次操作之后,计数器count加1,然后继续进行下一轮循环,重复这个过程,直到n为0。最终,函数返回1的个数。


使用Brian Kernighan算法来统计一个整数的二进制表示中1的个数的时间复杂度为O(log n),比其他方法都要更加高效,因为它跳过了很多不必要的计算。该算法在处理大型数据集时效率尤其显著。

目录
相关文章
|
缓存 前端开发 JavaScript
网页布局中,如何增加页面加载速度?
## 提升网页加载速度的关键策略 网页加载速度对用户体验和网站性能至关重要。本文介绍六种优化方法:优化图片与媒体文件(如使用WebP格式和懒加载),精简代码并压缩CSS/JavaScript,利用CDN加速;减少HTTP请求,如合并文件和使用CSS Sprites;合理配置浏览器缓存;优化服务器响应,选择高性能服务器并使用Gzip压缩;谨慎管理外部资源,考虑异步加载。根据网站具体情况调整这些策略,可显著提升加载速度。
|
弹性计算 数据中心
便宜香港服务器推荐,阿里云24元1个月,288元一年
便宜香港服务器推荐,阿里云24元1个月,288元一年,阿里云香港服务器中国香港数据中心网络线路类型BGP多线精品,中国电信CN2高速网络高质量、大规格BGP带宽,运营商精品公网直连中国内地,时延更低,优化海外回中国内地流量的公网线路,可以提高国际业务访问质量
|
云安全 弹性计算 安全
阿里云服务器基础安全防护简介,云服务器基础安全防护及常见安全产品简介
在使用云服务器的过程中,云服务器的安全问题是很多用户非常关心的问题,阿里云服务器不仅提供了一些基础防护,我们也可以选择其他的云安全类产品来确保我们云服务器的安全。本文为大家介绍一下阿里云服务器的基础安全防护有哪些,以及阿里云的一些安全防护类云产品。
阿里云服务器基础安全防护简介,云服务器基础安全防护及常见安全产品简介
|
机器学习/深度学习 人工智能 算法
AI通过分析历史天气数据后的应用
AI分析历史天气数据,提升气象预测精度,助力气候研究、农业管理、保险精算、城市规划、灾害预警、旅游交通及科研教育。中国气象局、datashareclub.com历史天气数据平台、中央气象台等国内外平台提供数据资源,应用涵盖多领域,预示AI在天气数据分析中前景广阔。例如,通过深度学习算法,AI能识别气候模式,优化农作物管理,降低保险风险,增强城市气候韧性,改善交通管理和旅游规划。
|
算法
shape_predictor
【6月更文挑战第19天】
326 8
|
安全 网络安全 数据处理
防火墙设置难倒你?这两种组网模式轻松解决网络安全难题!
【8月更文挑战第23天】在网络安全日益重要的今天,防火墙作为关键防护设备扮演着重要角色。本文重点分析两种核心组网模式:三层路由网关模式与二层透明网桥模式。前者通过IP层处理实现内外网隔离及丰富的策略配置,增强安全性;后者以MAC地址转发,部署简便,不影响现有网络结构,适合服务不可中断的情况。通过企业升级安全防护的实际案例,展示了不同模式的应用场景及优势,并提供了三层路由网关模式的配置示例。正确选择和配置防火墙组网模式对于提高网络安全性和保证业务连续性至关重要。
751 0
|
机器学习/深度学习 搜索推荐 算法
智能推荐系统有哪些特点?
智能推荐系统是在大数据的基础上,基于用户的兴趣进行个性化推荐,并且对用户和商品之间的交互信息进行持续监测和反馈,并不断优化推荐系统,从而提高用户体验、丰富平台内容、提高商业价值。 在智能推荐系统的加持下,内容生产从以“编辑推荐”为核心变成以“用户喜好”为核心。智能推荐系统不仅可以帮助平台筛选优质内容,还可以通过对用户数据的持续分析,挖掘出更多潜在需求。
|
关系型数据库 MySQL 数据处理
数据传输DTS延迟问题之数据延迟如何解决
数据传输服务(DTS)是一项专注于数据迁移和同步的云服务,在使用过程中可能遇到多种问题,本合集精选常见的DTS数据传输问题及其答疑解惑,以助用户顺利实现数据流转。
|
开发框架 数据安全/隐私保护 Android开发
iOS二维码的生成和扫码详细介绍(手把手教)
iOS二维码的生成和扫码详细介绍(手把手教)
1013 0