|  | 
 
| <?php /**
 * 根据十进制整数得到置为1的二进制位
 */
 functionget_bit_set_pos($int)
 {
 $str=strval(decbin($int));
 $str=strrev($str);
 $arr=array();
 for($i=0;$i<strlen($str);$i++){
 if($str{$i}){
 $arr[]=$i+1;
 }
 }
 return$arr;
 }
 
 
 /**
 * 设置整数中指定的bit位
 */
 functionset_bit_pos($int,$pos)
 {
 if($int>=0 &&$pos>0){
 $set_pos_arr=get_bit_set_pos($int);
 if($set_pos_arr&&array_search($pos,$set_pos_arr)!==false){
 return$int;
 }
 $int+=pow(2,$pos-1);
 return$int;
 }else{
 return$int;//false
 }
 }
 
 
 /**
 * 设置整数中指定的多个bit位(数组形式提供)
 */
 functionset_bit_pos_merge($int,$pos_arr)
 {
 if($int<0 ||!is_array($pos_arr)||!$pos_arr){
 return$int;//false
 }
 foreach($pos_arras$pos){
 if($pos>0){
 $int=set_bit_pos($int,$pos);
 }
 }
 return$int;
 }
 
 
 /**
 * 清除整数中指定的bit位
 */
 functionclean_bit_pos($int,$pos)
 {
 if($int>0 &&$pos>0){
 $set_pos_arr=get_bit_set_pos($int);
 if(!$set_pos_arr||array_search($pos,$set_pos_arr)===false){
 return$int;//false
 }
 $int-=pow(2,$pos-1);
 return$int;
 }else{
 return$int;//false
 }
 }
 
 
 /**
 * 清除整数中指定的多个bit位(数组形式提供)
 */
 functionclean_bit_pos_merge($int,$pos_arr)
 {
 if($int<0 ||!is_array($pos_arr)||!$pos_arr){
 return$int;//false
 }
 foreach($pos_arras$pos){
 if($pos>0){
 if(($ret=clean_bit_pos($int,$pos))!==false){
 $int=$ret;
 }
 }
 }
 return$int;
 }
 | 
 |