分解由按位运算符预先计算的参数中的整数

时间:2013-02-06 00:14:50

标签: php arguments bitwise-operators

我正在寻找一种方法来通过按位运算符从可能预先计算的整数中的函数中找出传递的参数(以及它们的顺序)。我已经知道我应该使用像2 ^ n这样的数字来表示可以传递的常数(由于按位计算),但我不知道如何分解它。

总结一下:

  1. 如何判断1和4已传递给以下函数
  2. 可以通过某种特定的按位运算符以某种方式获得这些的顺序吗?
  3. 这是一个显示我的意思的例子。

    $inst = new SomeClass;
    $inst->some_func( SomeClass::RULE1 | SomeClass::RULE3 );
    
    class SomeClass {
    
        const RULE1 = 1;
        const RULE2 = 2;
        const RULE3 = 4;
    
        public function some_func($arg) {
            // what are the RULE's in the $arg here?
        }
    

    请注意我正在试图弄清楚如何使用按位运算符作为函数参数。所以我不是在寻找其他解决方案,比如将数组传递给函数或使用func_get_args()

1 个答案:

答案 0 :(得分:1)

好吧,让我们来看看(语法适用于PHP 5.4):

const RULE1 = 0b0000 0001; // 1
const RULE2 = 0b0000 0010; // 2
const RULE3 = 0b0000 0100; // 4

所以当你传入$inst->some_func( SomeClass::RULE1 | SomeClass::RULE3 );;

arg将为0b0000 0101

现在实际使用它,我们会这样做:

if ($arg & self::RULE1) // check if the RULE1 bit is ON (ie: equals 1)
{
    // do stuff based on RULE1;
}

if ($arg & self::RULE2) // check if the RULE2 bit is ON
{
    // do stuff based on RULE2;
}

// etc

希望这有帮助!


  

可以通过某种特定的按位运算符以某种方式获得这些的顺序吗?

这是不可能的,因为RULE1 | RULE3RULE3 | RULE1都产生完全相同的二进制序列。