flynetcnflynetcn.blog.chinaunix.net
flynetcn
全部博文(252)
2017年(3)
2016年(18)
2015年(31)
2014年(18)
2013年(7)
2012年(8)
2011年(12)
2010年(30)
2009年(32)
2008年(57)
2007年(36)
MagicBoy
wangfei0
大鬼不动
dajun1
Leejiter
ahuimsn
zscc
cynthia
Bsolar
khls27
asodin
kenpear
分类:
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; }
上一篇:Cygwin
下一篇:C Development Environments
登录 注册