Преобразования бит/значение PHP работают не так, как ожидалось
ОБНОВЛЕНИЕ:
Для гуглеров вот исправленная версия:
Я пытаюсь создать класс, который может интерпретировать целочисленные значения так же, как это делают некоторые функции php по умолчанию (например, error_reporting(E_ERROR | E_WARNING | E_PARSE);
). По какой-то причине некоторые из моих результатов имеют неожиданные результаты (см. Код).
Смотрите эту страницу для получения дополнительной информации о: Побитовых операторах
Как я могу исправить эти неожиданные результаты?
В Код:
<?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
1 answers
Сбросьте содержимое вашего массива "бит". Вы не получаете тех ценностей, о которых думаете. Заключите их в кавычки, и вы получите ожидаемые результаты.
Изменить: сделайте то же самое в своем массиве vals. Вы указываете десятичные числа. Другими словами, 0010 означает десять , а не два.