<?php
/*
* @author: wusuopubupt
* @date : 2013-09-09
*
* PHP functions of bite operations
*/
//get unsigned int max value
function max_int() {
return ~(1 << 31);
}
//return $num*2
function multi2(&$num) {
return ($num << 1);
}
//judge odd or even,eg:even(10,100,110...),odd(01,11,101...),return boolean value
function is_even($num) {
return !($num & 1);
}
//switch a and b without temp
function switch_without_temp(&$a,&$b) {
$a ^= $b;
$b ^= $a;
$a ^= $b;
/* and here is a similar method:
$a = $a + $b;
$b = $a - $b;
$a = $a - $b;
*/
}
//judge if is same sign
function is_same_sign($a,$b) {
return !($a ^ $b);
}
//judeg if is Factorial of 2 ,eg:10,100,1000...
//notice that -----------> (n-1):01,011,0111...
function is_factorial_of2($num){
return n > 0 ? (n & (n - 1)) == 0 : false;
}
//calculate m % (2^n)
function calculate_mod($m,$n) {
return $m & ($n-1);
}
function get_average($a,$b) {
return ($a + $b) >> 1; //division by 2
}
//get bit
function get_bit($m,$n) {
return ($m >> ($n - 1) & 1);
}
//set bit to zero
function set_bit_zero($m,$n) {
return $m & ~(1 <<($m - 1));
}
// $num = -10;
// get_abs($num);
// echo $num;
?>
Bit Count:
<?php
$num = 6;
$count = 0;
while($num) {
$num = $num & ($num - 1);
$count++;
}
/* another method:
while($num) {
if(($num & 1) != 0) {
$count ++;
}
$num = $num>>1;
}
*/
var_dump($num);
var_dump($count);
?>
参考:http://blog.csdn.net/sgbfblog/article/details/8039147#reply