Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1183835
  • 博文数量: 252
  • 博客积分: 5421
  • 博客等级: 大校
  • 技术积分: 2418
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-17 12:59
文章分类

全部博文(252)

文章存档

2017年(3)

2016年(18)

2015年(31)

2014年(18)

2013年(7)

2012年(8)

2011年(12)

2010年(30)

2009年(32)

2008年(57)

2007年(36)

分类:

2010-04-02 19:19:36


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


阅读(1316) | 评论(0) | 转发(0) |
0

上一篇:Cygwin

下一篇:C Development Environments

给主人留下些什么吧!~~