1 echo $a = 2|4|8,PHP_EOL; 2 echo $a&8,PHP_EOL;//8 3 echo $a&4,PHP_EOL;//4 4 echo $a&2,PHP_EOL;//2 5 echo $a&16,PHP_EOL;//0 6 echo $a&32;//0
由结果看参与按位或运算的数(2的整数次幂)再与结果进行按位与运算结果为其本身,这是由于这两个操作符本身运算规则决定的,这个特点可以用于需记录和检查多种状态的场景。
1 function astrpos($str,$needle) 2 { 3 $ret = []; 4 $pos = 0; 5 while(($pos = strpos($str, $needle, $pos)) !== false){ 6 $ret[] = $pos; 7 $pos++; 8 } 9 return $ret; 10 } 11 12 function powbase2($value) { 13 $bin = decbin($value); 14 15 $indexes = astrpos($bin, '1'); 16 $len = strlen($bin) -1; 17 $ret = []; 18 foreach($indexes as $index) 19 { 20 $ret[] = pow(2, $len-$index); 21 } 22 23 return $ret; 24 } 25 26 print_r(powbase2($a));//[2,4,8]
反向解析函数,以便获取全部配置信息