对于googlers,这是更正后的版本:
我正在尝试创建一个可以解释整数值的类,就像一些默认的php函数一样(例如error_reporting(E_ERROR | E_WARNING | E_PARSE);
)。出于某种原因,我的一些输出有意想不到的结果(见代码)。
有关详细信息,请参阅此页面:Bitwise Operators
如何解决这些意外结果?
守则:
<?php
class bitwise {
private $xchng = array(
'bit' => array(
0000, 0001,
0010, 0011,
0100, 0101,
0110, 0111,
1000, 1001,
1010, 1011,
1100, 1101,
1110, 1111
),
'val' => array(
0000 => 0, 0001 => 1,
0010 => 2, 0011 => 3,
0100 => 4, 0101 => 5,
0110 => 6, 0111 => 7,
1000 => 8, 1001 => 9,
1010 => 10, 1011 => 11,
1100 => 12, 1101 => 13,
1110 => 14, 1111 => 15
)
);
public function create_bit_str($int_input){
$xchng = $this->xchng['bit'];
// convert value to bits
$vals = str_split((string) $int_input,2);
$values = '';
foreach ($vals as $val) {
$val = (int) $val;
if(isset($xchng[$val])){
$values .= $xchng[$val];
}else{
return FALSE;
}
}
return (int) $values;
}
public function create_val_str($int_input){
$xchng = $this->xchng['val'];
// convert bits to value
}
}
$bit = new bitwise;
var_dump($bit->create_bit_str(12 & 10)); // output 1000 (expected)
var_dump($bit->create_bit_str(12 | 10)); // output 1110 (expected)
var_dump($bit->create_bit_str(12 ^ 10)); // output 72 (unexpected) should be 0110 or 110
答案 0 :(得分:0)
转储'bit'数组的内容。你没有得到你认为自己的价值观。把它们放在引号中,你就会得到预期的结果。
编辑:在你的vals数组中做同样的事情。您正在指定十进制数字。换句话说,0010表示 10 ,而不是 2 。