好得很程序员自学网
  • 首页
  • 后端语言
    • C#
    • PHP
    • Python
    • java
    • Golang
    • ASP.NET
  • 前端开发
    • Angular
    • react框架
    • LayUi开发
    • javascript
    • HTML与HTML5
    • CSS与CSS3
    • jQuery
    • Bootstrap
    • NodeJS
    • Vue与小程序技术
    • Photoshop
  • 数据库技术
    • MSSQL
    • MYSQL
    • Redis
    • MongoDB
    • Oracle
    • PostgreSQL
    • Sqlite
    • 数据库基础
    • 数据库排错
  • CMS系统
    • HDHCMS
    • WordPress
    • Dedecms
    • PhpCms
    • 帝国CMS
    • ThinkPHP
    • Discuz
    • ZBlog
    • ECSHOP
  • 高手进阶
    • Android技术
    • 正则表达式
    • 数据结构与算法
  • 系统运维
    • Windows
    • apache
    • 服务器排错
    • 网站安全
    • nginx
    • linux系统
    • MacOS
  • 学习教程
    • 前端脚本教程
    • HTML与CSS 教程
    • 脚本语言教程
    • 数据库教程
    • 应用系统教程
  • 新技术
  • 编程导航
    • 区块链
    • IT资讯
    • 设计灵感
    • 建站资源
    • 开发团队
    • 程序社区
    • 图标图库
    • 图形动效
    • IDE环境
    • 在线工具
    • 调试测试
    • Node开发
    • 游戏框架
    • CSS库
    • Jquery插件
    • Js插件
    • Web框架
    • 移动端框架
    • 模块管理
    • 开发社区
    • 在线课堂
    • 框架类库
    • 项目托管
    • 云服务

当前位置:首页>后端语言>PHP
<tfoot draggable='sEl'></tfoot>

php右移运算符 php 运算符

很多站长朋友们都不太清楚php右移运算符,今天小编就来给大家整理php右移运算符,希望对各位有所帮助,具体内容如下:

本文目录一览: 1、 php如何实现js的移位运算符 2、 PHP语言PHP语言里的位运算符&、|、^ 、~、〈〈 、〉〉这些符号我一个也不懂,希望高手给个全面的解释!拜 3、 关于php 位运算符的问题 php如何实现js的移位运算符

移位包括有符号左移(<<)、有符号右移(>>)、无符号右移(>>>),其中 js 支持三种移位,PHP只支持前两种移位(没查到第三种),恰好需要PHP进行无符号右移,此处实现一下。先看结果

将数字 $a 向右无符号移动 $n 位

[php] view plain copy

function uright($a, $n)

{

$c = 2147483647>>($n-1);

return $c($a>>$n);

}

下面是这样做的理由

1、有符号右移的过程

2 >> 1

2在计算机中存储的二进制表示为

000000000  00000000  00000000  00000010

向右移动1位,高位补0

000000000  00000000  00000000  00000001

结果为1

-2 >> 1

负数的存储是以补码的方式存储的(相关知识自行了解),这里简单说明

符号位是 1,-2的表示为

100000000  00000000  00000000  00000010

补码:除符号位外,其他位按位取反,然后 + 1

11111111  11111111  11111111  11111101

11111111  11111111  11111111  11111110

向右移动1位,高位补1

11111111  11111111  11111111  11111111

结果为 -1(转换成10进制后)

注意:移位操作是按照计算机中实际存储的二进制形式进行移动的

2、无符号右移的过程

2 >> 1同上

-2 >> 1

补码右移1位,高位补 0

01111111  11111111  11111111  11111111

结果是 2147483647

无符号右移 n 位,即把所有位向右移动 n 位(有符号右移),然后把前 n 位变成 0。

要把前 n 位变成 0 ,只需要让其跟一个前 n 位是 0,后 32-n 位是 1 的数进行按位与就可以了。

构造前 n 位是 0 后 32-n 位是 1 的数:利用正数有符号右移高位补 0 实现,这里用 2147483647 这个正数实现(当然其他数也可以),这个数在计算机中的存储前面已经说了,是

01111111  11111111  11111111  11111111

利用这个数构造前 n 位是 0  的数,只需将其向右移动 n-1 位就行了

-2 无符号右移 2位的过程

-2右移2位:11111111  11111111  11111111  11111111

构造数:     00111111  11111111  11111111  11111111

按位与:     00111111  11111111  11111111  111111

PHP语言PHP语言里的位运算符&、|、^ 、~、〈〈 、〉〉这些符号我一个也不懂,希望高手给个全面的解释!拜

"" 按位与运算

按位与运算符""是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0。参与运算的数以补码方式出现。

例如:95可写算式如下:

00001001 (9的二进制补码)

00000101 (5的二进制补码)

00000001 (1的二进制补码)

<?php

$a = 9;

$b = 5;

echo sprintf("%b", $a$b);

?>

"|" 按位或运算

按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。

例如:9|5可写算式如下:

00001001

|00000101

00001101 (十进制为13)可见9|5=13

<?php

$a = 9;

$b = 5;

echo sprintf("%b", $a|$b)."\n"; //二进制

echo sprintf("%d", $a|$b)."\n"; //十进制

"^" 按位异或运算

按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现,例如9^5可写成算式如下:

00001001

^00000101

00001100 (十进制为12)

<?php

$a = 9;

$b = 5;

echo sprintf("%b", $a^$b)."\n"; //二进制

echo sprintf("%d", $a^$b)."\n"; //十进制

"~" 求反运算

求反运算符~为单目运算符,具有右结合性。其功能是对参与运算的数的各二进位按位求反。

例如~9的运算为:

~(0000000000001001)结果为:1111111111110110

<?php

$a = 9;

$b = 5;

echo sprintf("%b", ~$a)."\n"; //二进制

"〈〈" 左移运算

左移运算符“<<”是双目运算符。其功能把“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0。

例如:

a<<4

指把a的各二进位向左移动4位。如a=00000011(十进制3),左移4位后为00110000(十进制48)。

<?php

$a = 3;

$temp = $a<<4;

echo sprintf("%d", $temp)."\n"; //十进制

“>>” 右移运算

右移运算符“>>”是双目运算符。其功能是把“>> ”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。

例如:

设 a=48,

a>>4

表示把00110000右移为00000011(十进制3)。

应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定

<?php

$a = 48;

$temp = $a>>4;

echo sprintf("%d", $temp)."\n"; //十进制

关于php 位运算符的问题

这个涉及到系统底层,WEB开发中几乎没用到,知道下有这个东西就好了。底层的东西解释总是简单不了的。

变量在内存中的存放都是二进制数字。整数在32位系统上是占用4字节,一个字节是8位,也就是32位,位运算就是位级的运算操作了。

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

假定变量 $a 的值是 3,$b 的值是 2。

那么 $a 在内存中的存放的格式是:

00000000 00000000 00000000 00000011

每执行一次左移,都将所有的位向左移动,右边补零,左边超过的舍弃。

所以 $a 左移 2 得到的是:

00000000 00000000 00000000 00011000

也就是 12。相当于 3 × 2 × 2 = 12。

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

假定变量 $a 的值是 24,$b 的值是 2。

那么 $a 在内存中的存放的格式是:

00000000 00000000 00000000 00011000

每执行一次右移,都将所有的位向由移动,右边超过的舍弃,左边空出的位补零。

所以 $a 右移 2 得到的是:

00000000 00000000 00000000 00000110

也就是 6。相当于 24 ÷ 2 ÷ 2 = 6。

位移运算是系统底层运算,运算的速度比乘除还要快很多,优化代码优化到极致的时候,可以将数换算成二的公倍数,然后进行位移计算。但在WEB开发中几乎没有任何必要,而且超过系统底层了,程序在的可移植性就会降低。

其他的位运算符也是差不多的。比如:

$a $b And(按位与) 将把 $a 和 $b 中都为 1 的位设为 1。

假定变量 $a 的值是 5,$b 的值是 6。

$a:

00000000 00000000 00000000 00000101

$b:

00000000 00000000 00000000 00000110

$a $b :

00000000 00000000 00000000 00000101

00000000 00000000 00000000 00000110

───────────────────────────

00000000 00000000 00000000 00000100

竖的看,上下都是 1 的得到 1 ,否则就是 0。

所以 $a $b = 4。

~ $a Not(按位非) 将 $a 中为 0 的位设为 1,反之亦然。

~ $a:

00000000 00000000 00000000 00000101

───────────────────────────

11111111 11111111 11111111 11111010

如果 $a 是有符号整数,第一位是符号位,1表示负数,那么 ~ $a = -2147483642。

如果 $a 是无符号整数,第一位还是数据位,那么 ~ $a = 4294967290。

以下的就不详细介绍了:

$a | $b Or(按位或) 将把 $a 或者 $b 中为 1 的位设为 1。

$a ^ $b Xor(按位异或) 将把 $a 和 $b 中不同的位设为 1。

平常说的几位的系统,就是系统处理整数的时候,是多少个位同时计算的,上面的例子都是基于32位系统。因为移动时超过的位将被舍弃,如果是64位或12位的,位移的结果就可能不一样了,要将计算时位的数量调整下。

关于php右移运算符的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。

查看更多关于php右移运算符 php 运算符的详细内容...

声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did225982
更新时间:2023-05-11   阅读:40次

上一篇: php新浪微博接口 php仿新浪微博源码

下一篇:php随机获取数字 php怎么随机生成数字

相关资讯

最新资料更新

  • 1.notepad写php notepad可以写c语言吗
  • 2.铜仁php招聘信息 铜仁工作招聘信息
  • 3.JavaPHP你好 java welcome
  • 4.bashphp的简单介绍
  • 5.安卓phpapp 安卓php服务器
  • 6.学校php培训机构 php培训学校是什么意思
  • 7.php声明字符串 在php中声明变量应使用什么符号
  • 8.php构造方法重写 php 构造方法
  • 9.phpjson提交 phppost提交
  • 10.php下载控件 php下载器
  • 11.php自学教程推荐 php入门课程
  • 12.php输入日期表单 php输出日历表
  • 13.php旋转图片保存 php转jpg
  • 14.phpwhere循环 php中的循环
  • 15.极路由安装php环境 极路由安装v2ray
  • 16.php绘制健康码 php源码怎么搭建网站
  • 17.phpjavacms的简单介绍
  • 18.iconv函数php iconv函数参数
  • 19.phpflv播放器 php视频播放
  • 20.登录注册的php代码 php用户注册登录代码

CopyRight:2016-2025好得很程序员自学网 备案ICP:湘ICP备09009000号-16 http://www.haodehen.cn
本站资讯不构成任何建议,仅限于个人分享,参考须谨慎!
本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。

网站内容来源于网络分享,如有侵权发邮箱到:kenbest@126.com,收到邮件我们会即时下线处理。
网站框架支持:HDHCMS   51LA统计 百度统计
Copyright © 2018-2025 「好得很程序员自学网」
[ SiteMap ]