文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>PHP操作十进制非负整数中的bit位

PHP操作十进制非负整数中的bit位

时间:2010-04-02  来源:flynetcn


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


相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载