博客
关于我
位运算符 按位与 &——整数n的二进制数中1的个数
阅读量:278 次
发布时间:2019-03-01

本文共 496 字,大约阅读时间需要 1 分钟。

整数n的二进制数中1的个数

编写一个函数,输入是一个整数,返回其二进制表达式中数字位数为 '1' 的个数。

代码如下:

int func(int n) {    int count = 0;    while(n > 0) {        count++;        n &= (n - 1);    }    return count;}

原理:n & (n - 1) 按位与每计算一次,低位减一

当我们用n & (n - 1)进行按位与运算时,每次操作都会将n的最低位1转为0。这个过程不断重复直到n变为0。具体来说,每次循环n都会减少一个二进制位的重量。例如:

  • 对于n = 8(二进制1000),第一次操作后变成0(二进制0000),循环次数为1。
  • 对于n = 3(二进制11),第一次操作后变成2(二进制10),第二次操作后变成0,循环次数为2。

由此可见,n & (n - 1)运算的次数可以用来表示n的二进制中1的位数。

通过上述方法,我们可以快速计算出一个整数的二进制表示中1的个数。这一方法不仅简单高效,而且在时间复杂度上是O(log n),因此非常适用于大范围的整数。

转载地址:http://jwso.baihongyu.com/

你可能感兴趣的文章
Objective-C实现base64加密和base64解密算法(附完整源码)
查看>>
Objective-C实现base64加解密(附完整源码)
查看>>
Objective-C实现base64编码 (附完整源码)
查看>>
Objective-C实现base85 编码算法(附完整源码)
查看>>
Objective-C实现basic graphs基本图算法(附完整源码)
查看>>
Objective-C实现BCC校验计算(附完整源码)
查看>>
Objective-C实现bead sort珠排序算法(附完整源码)
查看>>
Objective-C实现BeadSort珠排序算法(附完整源码)
查看>>
Objective-C实现bellman ford贝尔曼福特算法(附完整源码)
查看>>
Objective-C实现bellman-ford贝尔曼-福特算法(附完整源码)
查看>>
Objective-C实现bellman-ford贝尔曼-福特算法(附完整源码)
查看>>
Objective-C实现bellmanFord贝尔曼-福特算法(附完整源码)
查看>>
Objective-C实现BellmanFord贝尔曼-福特算法(附完整源码)
查看>>
Objective-C实现bezier curve贝塞尔曲线算法(附完整源码)
查看>>
Objective-C实现bfs 最短路径算法(附完整源码)
查看>>
Objective-C实现BF算法 (附完整源码)
查看>>
Objective-C实现Bilateral Filter双边滤波器算法(附完整源码)
查看>>
Objective-C实现binary exponentiation二进制幂运算算法(附完整源码)
查看>>
Objective-C实现binary search二分查找算法(附完整源码)
查看>>
Objective-C实现binary tree mirror二叉树镜像算法(附完整源码)
查看>>