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 Code
$number= 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 in $n are: ".countSetBits($n);
?>

输出

Number of setbits in 123 are: 6

结论

总之,我们可以使用递归方法和循环遍历PHP中整数的所有位来计算设置位(1)。循环方法涉及使用while循环迭代整数的每个位。我们初始化一个计数器变量,并迭代直到数字变为0。在循环内,我们使用按位与1进行按位与运算来检查最低有效位。如果它等于1,我们递增计数器。然后,我们将数字右移1位。这个过程持续到所有位都被检查完毕,最后返回最终计数。

对于递归方法,我们可以定义一个递归函数,该函数以整数作为输入。在函数内部,我们使用按位与运算符与1进行按位与运算来检查最低有效位。如果它等于1,我们递增计数器。然后,我们将数字右移1位,并使用更新后的数字递归调用该函数。基本情况是当数字变为0时,此时我们返回计数器。这种方法递归地计算设置位,直到数字变为0。这两种方法都提供了一种计算整数中设置位的方法,允许根据程序员的特定需求和偏好选择不同的实现方式。

更新于:2023年8月2日

浏览量:217

开启您的职业生涯

通过完成课程获得认证

开始学习
广告