|
<?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;
} |
|