<
?
php
/**
* 根据十进制整数得到置为1的二进制位
*/
function
get_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位
*/
function
set_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位(数组形式提供)
*/
function
set_bit_pos_merge(
$
int
,
$
pos_arr
)
{
if
(
$
int
<
0 |
|
!
is_array
(
$
pos_arr
)
|
|
!
$
pos_arr
)
{
return
$
int
;
//false
}
foreach
(
$
pos_arr
as
$
pos
)
{
if
(
$
pos
>
0)
{
$
int
=
set_bit_pos(
$
int
,
$
pos
)
;
}
}
return
$
int
;
}
/**
* 清除整数中指定的bit位
*/
function
clean_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位(数组形式提供)
*/
function
clean_bit_pos_merge(
$
int
,
$
pos_arr
)
{
if
(
$
int
<
0 |
|
!
is_array
(
$
pos_arr
)
|
|
!
$
pos_arr
)
{
return
$
int
;
//false
}
foreach
(
$
pos_arr
as
$
pos
)
{
if
(
$
pos
>
0)
{
if
(
(
$
ret
=
clean_bit_pos(
$
int
,
$
pos
)
)
!
=
=
false
)
{
$
int
=
$
ret
;
}
}
}
return
$
int
;
}