搜索墙首页  编程技术  java  asp  ajax  php  c/c#/c++  数据库  oracle  mysql  db2  操作系统  windows  linux  股吧
首页 > 编程 > PHP
 1         
1楼  flynetcn 2010-04-02


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


 1         
您的发言将按有关规定都会存档,您须为所发表后果负责,请您遵纪守法并注意语言文明。
标题:PHP操作十进制非负整数中的bit位
热门关注
标题回复点击
三 php与XML、XSLT、Mysql的结合运用,下载篇0455
php 学习的连接整理0384
无法加载 mcrypt 扩展,请检查您的 PHP 配置。7290
源码安装PHP5.3.00272
php 日记(资料来源:internet )1266
eclipse 插件net.sf.simpletest.eclipse 无法装入类1264
为Fedora Linux 上PHP添加OCI 支持0260
php & apache & mysql安装配置软件与文档0252
云动力发布Magento最新版本简体中文语言包0249
Warning: mysql_num_rows(): supplied argument3240
搜索墙@2009 www.pkwall.com all rights reserved QQ:276471788 [京ICP备09111534号]
声明:本站部分数据来源于网络,仅供参考,如有版权问题,请联系我们,我们将及时删除!转载本站请注明来源