题目描述:
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
输入:
输入可能包含多个测试样例。
对于每个输入文件,第一行输入一个整数T,代表测试样例的数量。对于每个测试样例输入为一个整数。
。n保证是int范围内的一个整数。
输出:
对应每个测试案例,
输出一个整数,代表输入的那个数中1的个数。
样例输入:
3
4
5
-1
样例输出:
1
2
32
无论输入的是整数还是负数还是0,都可以将该整数和1进行与操作,如果结果不为0,则表明整数的最低位是1,而后将1左移一位,再次与该证书进行与操作,如果结果不为0,说明整数的次低位为1,依次类推,当1移位到变为0时,统计结束。这种方法需要将1移动32位,也就是需要循环32次。 更好的办法是利用如下结论:
把一个整数 (无论正负或0)减去1,再和原整数做与运算,会把该整数最右边的一个1变为0,例如:110100减1后变为110011,二者进行与操作后,得到110000,最后边的1变为了0,而前面的位都不变。
这样,我们可以利用这这一结论来从左向右依次将整数的最右边的1变为0,当该整数的所有位为1的位均变为0之后,便统计到了该整数二进制中1的个数
#include<stdio.h>
#include<stdlib.h>
/*
下面这种方法遇到负数会挂
*/
int numberOf1(int n)
{
int count=0;
while(n)
{
if(n&1)
count++;
n=n>>1;
}
return count;
}
/*
常规解法,把与的数字左移
*/
int otherNumberOf1(int n)
{
int count=0;
unsigned int flag=1;
while(flag)
{
if(n&flag)
count++;
flag=flag<<1;
}
return count;
}
/*
比较高级的解法
*/
int anotherNumberOf1(int n)
{
int count=0;
while(n)
{
++count;
n=(n-1)&n;
}
return count;
}
int main()
{
int nums;
while(scanf("%d",&nums)!=EOF)
{
int *N=(int*)malloc(nums*sizeof(int));
if(N==NULL)
exit(1);
int i;
for(i=0;i<nums;i++)
{
scanf("%d",N+i);
printf("%d\n",otherNumberOf1(N[i]));
}
}
}
结果:
分享到:
相关推荐
3. **统计1的个数及其位置**:在二进制表示中,记录下所有1出现的位置,并按顺序输出这些位置。 #### 2.2 C语言实现 下面是基于以上思路的具体C语言代码实现: ```c #include int main() { int d, n, a[20], i, ...
### C++ 计算一个数字的二进制中0或1的个数原理及代码解析 在计算机科学中,二进制表示法是基础之一,它不仅被用于数据存储,还在算法设计、加密技术以及系统优化等多个方面发挥着重要作用。本篇文章将详细探讨如何...
在Android开发中,我们经常会遇到各种算法挑战,其中之一就是如何计算一个十进制数N的二进制表示中“1”的个数。这个任务看似简单,但其实涉及到计算机科学的基础知识,包括二进制转换、位操作以及算法设计。下面...
### 求二进制数中1的个数 #### 背景介绍 在计算机科学领域,理解和操作二进制数是非常基础且重要的技能之一。对于一个字节(8位)的变量,求其二进制表示中“1”的个数是一个常见的问题。这一问题不仅出现在计算机...
"判断32位无符号整数二进制中1的个数" 本资源主要介绍了在32位无符号整数二进制中统计1的个数的四种方法。 方法一:逐位比较法 该方法的思路是通过逐位比较来统计1的个数。代码如下: ```c int findone(unsigned ...
### 求二进制数中1的个数 #### 背景介绍 在计算机科学领域,了解和掌握如何高效地处理二进制数据是非常重要的。本篇文章将围绕“求二进制数中1的个数”这一主题展开讨论。这一问题虽然看似简单,但在不同的应用场景...
汇编实现统计输入数据中1的个数,转换为二进制判断
当我们谈论一个整数在二进制中的1的个数时,实际上是在寻找它的二进制表示中1的出现次数。这个问题在实际编程中经常遇到,尤其是在算法和数据结构的题目中,比如LeetCode上的这个题目。 给定的描述要求我们实现一个...
二进制中1的个数.md
python python_剑指offer第11题二进制1的个数
另一种方法是利用位运算,如异或操作(^),连续异或0或1可以得到当前字节中1的个数,因为任何数与0异或保持不变,任何数与1异或可以翻转其二进制表示中的每一位。这种方法通常比字符串操作更快。 3. **文件映射**...
java基础面试题二进制中1的个数本资源系百度网盘分享地址
801. 二进制中1的个数算法:#位运算每次减去给定整数 x 二进制中的最后一位 1(lowbit(n) = n & -n),一共能减几次 x 二进制中就有几个
c++ c++_剑指offer题解之二进制中1的个数
1.4 一题三解:二进制中1的个数.mp4
15. 二进制中 1 的个数题目链接牛客网题目描述输入一个整数,输出该数二进制表示中 1 的个数。解题思路n&(n-1) 位运算可以将 n 的位级表示中最低的那
统计整数的二进制表示形式中有几个1(java实现),代码中有三种方法,分别是利用除、余的方法,位运算,以及利用“与”运算的方法。其中第三种方法效率最高,二进制数中有几个1,算法中的循环内的运算就执行几次。
剑指 Offer 15. 二进制中1的个数方法一:位运算* @param {number} n - a positive integervar hammingW
在这个计数器中,每个触发器都可以存储一个二进制位(0 或 1)。当输入脉冲信号到达时,触发器的状态会发生变化,导致计数器的输出信号变化。异步二进制计数器的主要组成部分包括触发器、计数逻辑电路和输出电路。 ...