对复选框求和并检查是否在 PHP 中设置了位


summing check boxes and checking if a bit is set in php

我需要使用两个函数,一个对复选框的值求和,我将该值放入用于网站搜索页面的众多复选框之一的cookie中。

第二个函数检查是否设置了位,我不知道这个函数应该做什么。我知道它应该做什么,但我没有看到它实际上在函数中做任何事情。

所有值都是 2 的幂,它应该查看总和的数字是否包含 2 的幂。下面是函数:

function isBitSet($power, $decimal)
{
    if((pow(2,$power)) & ($decimal))
    {       
            return 1;
    }
    else
            return 0;
}

&是按位 AND 运算符(不要与 && 混淆,后者是一个比较运算符)! &一点一点地比较其左侧的事物和右侧的事物,并且仅为两个输入位都有1的每个位输出一个1。我将展示一个例子:

在下面的示例中,顶部数字是 pow(2, $power) ,其中 $power = 3 。它以二进制形式编写,以使其更清晰:将 2 转换为 3 的幂,将二进制1右移了 3 位。

  00001000   <- this is pow(2, 3)
& 01101010   <- this is your $decimal (in binary form)
  ========
= 00001000

你看?所有输出位均为 0,但两个输入位均为 1 的情况除外。

我们所做的是将pow(2, 3)用作掩码:它已将每个位清除为 0,除了我们感兴趣的位(位 3)。如果$decimal包含 2 的特定幂,则该位将为 1,否则将为 0:

$decimal contains that power of 2 -> result will be 00001000
$decimal does not contain that ^2 -> result will be 00000000

由于任何非零整数的计算结果在 PHP 中都true if,因此如果设置了该位(即 $decimal包含 2 的幂),如果未设置该位,则会发生else(因为&将导致输出为 00000000 )。

如果您需要澄清任何内容,请发表评论。希望对您有所帮助。