【B2B研发商城】 【加入收藏】 【设为首页】 【进入论坛】 【站点地图】

你的位置:中国研发网 >> 技术文章 >> web开发 >> PHP >> 详细内容 在线投稿

php中逻辑移位的解决办法

热度140票  浏览86次 【共0条评论】【我要评论 时间:2009年11月02日 11:25

推荐:启网 - 专业的主机、服务器合租提供商 17hz.net - 5年服务器合租精品服务

我们知道移位有算术移位与逻辑移位

算术移位:手册里面是这样介绍的.

$a << $b

Shift left(左移)

将 $a 中的位向左移动 $b 次(每一次移动都表示“乘以 2”)。

$a >> $b

Shift right(右移)

将 $a 中的位向右移动 $b 次(每一次移动都表示“除以 2”)。

php是不支持无符号整数的,所以二进制里的最高位即最左边的哪一位是表示正负的(1=>负,0=>正)

当右移的时候,忽略移除位,左边填充符号位(就看最高位了),这个就是php移位的实质了.

而在javascript里面有个逻辑右移位>>>, 实质就是忽略移除位,左边填充0,要用php怎么实现逻辑右移呢?

请看:(针对32位系统)

function SHIFTR($x, $bits)

{

// 位移量超出范围的两种情况

if($bits <= 0) {

return $x;

}

if($bits >= 32) {

return 0;

}

//转换成代表二进制数字的字符串

$bin = decbin($x);

$l = strlen($bin);

//字符串长度超出则截取低32位,长度不够,则填充高位为0到32位

if($l > 32) {

$bin = substr($bin, $l - 32, 32);

} elseif($l < 32) {

$bin = str_pad($bin, 32, '0', STR_PAD_LEFT);

}

//取出要移动的位数,并在左边填充0

return bindec(str_pad(substr($bin, 0, 32 - $bits), 32, '0', STR_PAD_LEFT));

}

请支持:酷瓜网:http://www.koogua.com

本站所有文章欢迎任何形式的转载,但请注明作者及出处,尊重他人劳动成果!
文章转载自:中国研发网 [http://www.yanfaw.com]
本文标题:php中逻辑移位的解决办法
顶:3 踩:7
对本文中的事件或人物打分:
当前平均分:-0.41 (44次打分)
对本篇资讯内容的质量打分:
当前平均分:0.13 (48次打分)
【已经有38人表态】
4票
感动
6票
路过
4票
高兴
4票
难过
4票
搞笑
5票
愤怒
4票
无聊
7票
同情
上一篇 下一篇
发表评论

网友评论仅供网友表达个人看法,并不表明本网同意其观点或证实其描述。

查看全部回复【已有0位网友发表了看法】