判断一个整数的二进制数里有几个1

本文介绍了两种方法来判断一个整数的二进制表示中包含多少个1。方法1是将整数转换为二进制字符串,然后遍历字符计数。方法2利用位运算,通过与运算和递减操作快速计算1的个数。以10为例,两种方法都得出其二进制表示1010中含有2个1。
思路: 先把整数(十进制)转为二进制来处理吧,比如n=10,二进制为1010
方法1:最简单的当然是转成二进制后一位一位的比较。
int count = 0;
string a=Convert.ToString(n, 2);//C#的进制转化
判断一个二进制1的个数,有以下几种方法: 1. **按位与法**:通过`n & (n - 1)`表达式去掉二进制序列中最右边的1,每进行一次操作,就会去掉一个1,直到整个二进制全为0,操作的次数就是1的个数。示例代码如下: ```python def count_ones(n): count = 0 while n: n = n & (n - 1) count = count + 1 return count ``` 该方法的核心思想是每次按位与操作后,最右边的1会消失,二进制位有多少个1就执行`n = n & (n - 1)`多少次,直到整个二进制全为0 [^1]。 2. **右移判断法**:把这个数转变为二进制,然后判断最小位是否为1,然后把数字右移一位,继续判断,直到最后二进制数等于0。示例代码如下: ```java private static int NumberOf1_One(int n) { int count = 0; while (n != 0) { if ((n & 1) == 1) { count++; } n = n >> 1; } return count; } ``` 此方法通过不断右移数字,并判断最末位是否为1来统计1的个数 [^2]。 3. **逐位判断法**:将这个数与1进行按位与,如果结果是1,那么这个数的最末位就是1判断完最末位,再将这个数进行右移运算,判断倒数第二位,如此循环32次(对于32位整数),就判断出了这个数二进制序列中有多少个数字1。示例代码如下: ```c #include <stdio.h> #include <stdlib.h> int count_one_bits(int n) { int count = 0; int i = 0; for (i = 0; i < 32; i++) { if (((n >> i) & 1) == 1) { count++; } } return count; } int main() { int num = 0; scanf("%d", &num); int ret = count_one_bits(num); printf("%d\n", ret); system("pause"); return 0; } ``` 该方法弥补了模2除2法只能判断正数的缺陷,通过循环32次判断每一位是否为1 [^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值