/**
* 二进制数据比对,按照从右到左置换value2值所占长度数据位
* 以置换值为1的部分作为要被置换位的标示
*
@author woofa
* @param int $value 原值
* @param int $value2 置换值
* @param bool $type 被置换位的新值 (1增加,0去掉)
*
@return int 合并后的结果
*/
function getDecbinDiff($value, $value2,$type=1) {
$result = array();
$value_arr = array_reverse(str_split(decbin(intval($value))));
$value2_arr = array_reverse(str_split(decbin(intval($value2))));
$cnt1 = count($value_arr);
$cnt2 = count($value2_arr);
if ($cnt1 > $cnt2)
$cnt = $cnt1 ;
else
$cnt = $cnt2 ;
$i = 0;
do {
if(!isset($value_arr[$i])) {
$value_arr[$i] = 0 ;
}else if(!isset($value2_arr[$i])) {
$value2_arr[$i] = 0 ;
}
if(intval($value2_arr[$i])==1){
$result[$i] = "$type" ;
}else{
$result[$i] = $value_arr[$i] ;
}
$i++;
} while ($i < $cnt);
$result = implode('', array_reverse($result));
return bindec($result) ;
}
/*保留所有权利,嘿嘿*/
/*
以下是用法:
$num1 = 2 ;//二进制为10
$num2 = 1 ;//二进制为1
以下是用法:
$num1 = 2 ;//二进制为10
$num2 = 1 ;//二进制为1
$type = 0 ;/置换为0。$num1中与$num2相同位,且$num2为1的位将被置换为0.否则为1.
$rs = getDecbinDiff($num1,$num2)
$rs = getDecbinDiff($num1,$num2)
var_dump($rs);//$type为1输出int(3).type为0输出为int(2);
*/