一直以来对算法性的东西了解的少,这不今天又遇见问题。看google黑板报一个数学之美的文章简单之美:布尔代数和搜索引擎的索引,觉得对二进制的运算练习很少,于是拿来练手。
当位数不一样时运行的结果已然不是1和0的组合了
例如:
CODE:
$a = 1001;
$b = 111000;
$c = $a & $b ;
$d = $a | $b ;
$e = $a ^ $b ;
echo $c." ".$d." ".$e;
?>
$b = 111000;
$c = $a & $b ;
$d = $a | $b ;
$e = $a ^ $b ;
echo $c." ".$d." ".$e;
?>
结果是 :392 111609 111217
不明白其中的道理,转而向喜悦村求救。得到fly512给的答案:
CODE:
$a = 1001;
$a1 = base_convert( $a, 10, 2) ; //把10进制转化为2进制
$b = 111000;
$b1 = base_convert( $b, 10, 2); //把10进制转化为2进制
$c = $a & $b ;
echo $c.'
';//十进制结果
echo base_convert( $c, 10, 2); //把$c转化为2进制
echo $a1." ".$b1."
";
/******************
00000001111101001 //$a1的值,也就是$a的2进制,高位加0,与$b的2进制对齐
11011000110011000 //$b1的值,也就是$b的2进制
00000000110001000 //相与的结果,全1则为1,否则为0
********************/
?>
不由得为自己的函数知识感到惭愧。。。。。
$a1 = base_convert( $a, 10, 2) ; //把10进制转化为2进制
$b = 111000;
$b1 = base_convert( $b, 10, 2); //把10进制转化为2进制
$c = $a & $b ;
echo $c.'
';//十进制结果
echo base_convert( $c, 10, 2); //把$c转化为2进制
echo $a1." ".$b1."
";
/******************
00000001111101001 //$a1的值,也就是$a的2进制,高位加0,与$b的2进制对齐
11011000110011000 //$b1的值,也就是$b的2进制
00000000110001000 //相与的结果,全1则为1,否则为0
********************/
?>
展开全文
收起全文