PHP 统计整数中的设置位数
什么是二进制代码
二进制代码是使用基于2的数字系统表示信息或数据的系统。它只使用两个数字,通常是0和1,来表示所有的值。二进制代码中的每个数字称为一个位(二进制数字的缩写)。
在二进制代码中,每个数字代表2的幂。从最右边的数字开始,2的幂从右到左递增。例如,在一个8位二进制代码中,最右边的位代表2^0(即1),下一个位代表2^1(即2),下一个位代表2^2(即4),以此类推。
示例
让我们以十进制数42为例,将其表示为二进制代码。要将42转换为二进制,我们将其连续除以2,并跟踪余数,直到商变为零。
以下是这个步骤的逐步过程:
步骤1
42 ÷ 2 = 21,余数为0
步骤2
21 ÷ 2 = 10,余数为1
步骤3
10 ÷ 2 = 5,余数为0
步骤4
5 ÷ 2 = 2,余数为1
步骤5
2 ÷ 2 = 1,余数为0
步骤6
1 ÷ 2 = 0,余数为1
要获得二进制表示,我们从底部(最后一个余数)开始,从下到上读取余数。
结果为 42 的二进制代码是: 101010
因此,十进制数42在二进制代码中表示为101010。
什么是设置位
在二进制代码的上下文中,设置位指的是被设置为1的二进制数字(位)。另一方面,清零位指的是被设置为0的二进制数字(位)。
示例
例如,在二进制代码101010中,有三个设置位(对应值为1的位置)和三个清零位(对应值为0的位置)。
PHP程序:统计整数中的设置位数
方法1:遍历整数中的所有位
示例
<?php
// Function to get no of set
// bits in binary representation
// of positive integer n
function countSetBits(n)
{count = 0;
while (n)
{count += n&1;n >>= 1;
}
return count;
}
// Driver Codenumber= 12;
echo "Number of setbits in number: " .countSetBits(number);
?>
输出
Number of setbits in 12: 2
方法2:递归方法
<?php
// PHP implementation of recursive
// approach to find the number of
// set bits in binary representation
// of positive integer n
// recursive function
// to count set bits
function countSetBits(n)
{
// base case
if (n == 0)
return 0;
else
// if last bit set
// add 1 else add 0
return (n&1) +
countSetBits(n >> 1);
}
// Driver code
// get value from user
n = 123;
// function calling
echo "Number of setbits inn are: ".countSetBits($n);
?>
输出
Number of setbits in 123 are: 6
结论
总之,在PHP中,我们可以使用递归方法和通过遍历整数的所有位来计算整数中集合位(1s)的数量。循环方法通过使用while循环迭代整数的每一位来实现。我们初始化一个计数变量,并循环直到数字变为0。在循环内部,我们使用按位与运算符1来检查最低有效位。如果等于1,则增加计数器。然后,我们将数字右移1位。此过程一直持续到所有位都被检查,并返回最终计数。
对于递归方法,我们可以定义一个接受整数作为输入的递归函数。在函数内部,我们使用按位与运算符和1来检查最低有效位。如果等于1,则增加计数器。然后,我们将数字右移1位,并使用更新后的数字递归调用函数。基本情况是当数字变为0时,我们返回计数器。该方法递归计算设置位,直到数字变为0。这两种方法都提供了一种计算整数中集合位的方式,根据程序员的具体需求和偏好可以选择不同的实现。