<?php
/**
* Copyright Nicholas Jordon - All Rights Reserved
* License: GNU LGPL v3 or later
* License URL: http://www.gnu.org/licenses/lgpl-3.0.html
*/
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); // cast (str) incase they do (int)
$values = '';
foreach ($vals as $val) {
$val = (int) $val;
if(isset($xchng[$val])){
$values .= $xchng[$val];
}else{
return FALSE;
}
}
return $values;
}
public function create_val_str($str_input){
$xchng = $this->xchng['val'];
// convert bits to value
$bits = str_split((string) $str_input,4); // cast (str) incase they do (int)
$r_str = '';
foreach ($bits as $bit) {
$bit = $bit;
if(isset($xchng[$bit])){
$r_str .= $xchng[$bit];
}else{
return FALSE;
}
}
return $r_str;
}
}
// testing script
$bit = new bitwise;
$range = range(0,15);
foreach ($range as $num) {
foreach ($range as $cnum) {
$org = $bit->create_bit_str($num & $cnum);
$r1 = $bit->create_bit_str($num);
$r2 = $bit->create_bit_str($cnum);
echo ((string) $num).' & '.$cnum.' or '.var_export($r1,1).' & '.var_export($r2,1).' = '.var_export($org,1).' or '.var_export($bit->create_val_str($org),1).PHP_EOL;
$org = $bit->create_bit_str($num | $cnum);
echo ((string) $num).' | '.$cnum.' or '.var_export($r1,1).' | '.var_export($r2,1).' = '.var_export($org,1).' or '.var_export($bit->create_val_str($org),1).PHP_EOL;
$org = $bit->create_bit_str($num ^ $cnum);
echo ((string) $num).' ^ '.$cnum.' or '.var_export($r1,1).' ^ '.var_export($r2,1).' = '.var_export($org,1).' or '.var_export($bit->create_val_str($org),1).PHP_EOL.PHP_EOL;
}
}