二进制位替换函数

  /**
      * 二进制数据比对,按照从右到左置换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);
*/
  

转载于:https://my.oschina.net/wufa/blog/69866

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值