判断一个数的二进制中1的个数

本文介绍了两种实用的二进制位操作技巧:一是通过位运算判断一个整数是否为2的幂;二是计算任意整数二进制表示中1的个数。这两种技巧在计算机科学和编程竞赛中十分常见,掌握它们能够帮助程序员更高效地处理二进制相关问题。

1、判断一个数的二进制中1的个数

    public boolean isPowerOf2(int num) {
        return (num & num - 1) == 0;
    }

2、判断一个数的二进制中1的个数

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        int count = 0;
        while (num != 0) {
           num = num & (num - 1);
           count++;
        }
        System.out.println(count);
    }
    ```
判断一个二进制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]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值