二进制位替换函数

  /**
      * 二进制数据比对,按照从右到左置换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
  $type = 0 ;/置换为0。$num1中与$num2相同位,且$num2为1的位将被置换为0.否则为1.
  $rs = getDecbinDiff($num1,$num2)
  var_dump($rs);//$type为1输出int(3).type为0输出为int(2);
*/
  

你可能感兴趣的:(二进制位替换函数)