移位包括有符号左移(<<)、有符号右移(>>)、无符号右移(>>>),其中 js 支持三种移位,PHP只支持前两种移位(没查到第三种),恰好需要PHP进行无符号右移,此处实现一下。先看结果
将数字 $a 向右无符号移动 $n 位
function uright($a, $n)
{
$c = 2147483647>>($n-1);
return $c&($a>>$n);
}

下面是这样做的理由
1、有符号右移的过程

 >>
2在计算机中存储的二进制表示为 向右移动1位,高位补0 结果为1
- >>
负数的存储是以补码的方式存储的(相关知识自行了解),这里简单说明
符号位是 ,-2的表示为 补码:除符号位外,其他位按位取反,然后 + 向右移动1位,高位补1 结果为 -(转换成10进制后)
注意:移位操作是按照计算机中实际存储的二进制形式进行移动的

2、无符号右移的过程

 >> 1同上
- >>
补码右移1位,高位补
     
结果是
无符号右移 n 位,即把所有位向右移动 n 位(有符号右移),然后把前 n 位变成 。
要把前 n 位变成 ,只需要让其跟一个前 n 位是 ,后 -n 位是 的数进行按位与就可以了。
构造前 n 位是 后 -n 位是 的数:利用正数有符号右移高位补 实现,这里用 这个正数实现(当然其他数也可以),这个数在计算机中的存储前面已经说了,是
     
利用这个数构造前 n 位是  的数,只需将其向右移动 n- 位就行了
- 无符号右移 2位的过程
-2右移2位:      
构造数:          
按位与:          

其他了解:

https://baike.baidu.com/item/%E8%A1%A5%E7%A0%81/6854613?fr=aladdin

转: https://blog.csdn.net/u010320108/article/details/77967711

PHP实现无符号右移(js中的 >>>)的更多相关文章

  1. C#无符号右移

    /// <summary>         /// 无符号右移,与JS中的>>>等价         /// </summary>         /// & ...

  2. javascript 按位或(|),无符号右移(>>>)运算,组合技巧来实现————密码强度提示,四种情况??

    直接上代码,原来的代码中,switch中的第一个case,判断之后,少加了个break 跳出判断语句,害得我查了半天,“怎么样式老是不对,不科学啊,呵呵,原来是没跳出case的判断了,还会执行后面的判 ...

  3. 原码,反码,补码 与(&) 或(|) 非(~) 异或(^) 左移 << 右移 >> 无符号右移 >>>

    原码 数字在计算机中以二进制表示,8位的字长,最高位是符号位, 正数为0,负数为1.比如,3为0000 0011: -3为1000 0011. 注意,Java中int为32位.3的16进制表示为3,- ...

  4. java的<<左移,>>右移,>>>无符号右移

    >>右移 右移,道在二进制中,假设用一个32位的Int表示一个64,那么高位就都是0,所以当我们把整个二进制数右移,如0100000 >> 2 = 0001000,可以看到右移 ...

  5. ABAP语言实现 左移 <<、无符号右移 >>> 位移操作

    这几天要在ABAP中实现 3DES 标准对称加密算法,与其他外部系统进行加密/解密操作.由于ABAP语言中没有 左移 <<.无符号右移 >>>  操作,只能自己实现 思路 ...

  6. 分析轮子(二)- << ,>>,>> (左移、右移、无符号右移)

    前言:写 分析轮子(一)-ArrayList.java 的时候看到源码中有 int newCapacity = oldCapacity + (oldCapacity >> 1); 这样的代 ...

  7. 异或运算符(^)、与运算符(&)、或运算符(|)、反运算符(~)、右移运算符(>>)、无符号右移运算符(>>>)

    目录 异或(^).异或和 的性质及应用总结 异或的含义 异或的性质:满足交换律和结合律 异或的应用 按位 与运算符(&) 按位 或运算符(|) 取 反运算符(~) 右移运算符(>> ...

  8. [JAVA]移位运算(左移<<,右移>>和无符号右移>>>)

    一.背景知识 整数在内存中是以二进制的形式存在的,而且存的是该整数的补码.最高位代表符号位,正数为0,负数为1 正数的补码是其二进制本身,负数的补码则是 符号位保持1不变,其他位按位取反再加1,+0和 ...

  9. java移位运算符:<<(左移)、>>(带符号右移)和>>>(无符号右移)。

    1. 左移运算符 左移运算符<<使指定值的所有位都左移规定的次数. 1)它的通用格式如下所示: value << num num 指定要移位值value 移动的位数. 左移的规 ...

随机推荐

  1. @Service注解的使用

    首先,在applicationContext.xml文件中加一行: <context:component-scan base-package="com.hzhi.clas"/ ...

  2. (素材源代码) 猫猫学iOS 之UIDynamic重力、弹性碰撞吸附等现象牛逼Demo

    猫猫分享,必须精品 原创文章,欢迎转载. 转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243 一:效果 二:代码 #import "ViewCon ...

  3. 通用ajax请求方法封装,兼容主流浏览器

    ajax简单介绍 没有AJAX会怎么样?普通的ASP.Net每次运行服务端方法的时候都要刷新当前页面. 假设没有AJAX,在youku看视频的过程中假设点击了"顶.踩".评论.评论 ...

  4. React-Native视频组件react-native-video使用(安卓版)

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/7366019.html 一:安装 在IDE中打开你的项目,然后在IDE的terminal,输入: npm i - ...

  5. Flash 矢量图和位图性能对比 导出为位图/缓存为位图 export as bitmap / cache as bitmap

     大家都知道Flash处理矢量图比位图要慢,而具体的性能上对比也有不少的前人已经做过.http://bbs.9ria.com/forum.php?mod=viewthread&tid=2282 ...

  6. Android玩转百度地图Sha1获取正确姿势?

    场景一 由于近期项目钟要用到定位功能因此肯定须要用到地图以及地位功能,相信大家也知道眼下国内比較出名的地图像百度.高德.腾讯等这些还是用到比較多的.于是思考了一下决定还是用百度,相信老司机们都知道的哈 ...

  7. android手机导入.cer证书文件的方法

    访问很多https协议的网站需要安装证书,手机也可以导入cer文件,你知道么?本文将通过简单的两步告诉你手机安装cer文件的方法. 步骤一:请先将数字证书文件“******.cer”文件复制到SD卡的 ...

  8. git pull时冲突的几种解决方式

    仅结合本人使用场景,方法可能不是最优的 1. 忽略本地修改,强制拉取远程到本地 主要是项目中的文档目录,看的时候可能多了些标注,现在远程文档更新,本地的版本已无用,可以强拉 git fetch --a ...

  9. 关于 Dropout 防止过拟合的问题

    关于 Dropout 可以防止过拟合,出处:深度学习领域大神 Hinton,在2012年文献:<Improving neural networks by preventing co-adapta ...

  10. 构建高性能数据库缓存之Redis(一)

    一.Redis概述 1.1 什么是redis Redis是一个开源的用ANSI C编写.支持网络.基于内存.亦可持久化的日志型.Key-Value数据库,根据DB-Engines.com站点月度排行的 ...