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; } }