0

0

php 位运算

php中文网

php中文网

发布时间:2016-06-06 20:50:38

|

1526人浏览过

|

来源于php中文网

原创

关于php的位运算 手册中 是这样介绍的

例子 名称 结果
$a & $b And(按位与) 将把 $a 和 $b 中都为 1 的位设为 1。
$a | $b Or(按位或) 将把 $a 或者 $b 中为 1 的位设为 1。
$a ^ $b Xor(按位异或) 将把 $a 和 $b 中不同的位设为 1。
~ $a Not(按位非) 将 $a 中为 0 的位设为 1,反之亦然。
$a $a >> $b Shift right(右移) 将 $a 中的位向右移动 $b 次(每一次移动都表示“除以 2”)。

但是 我想知道 应该怎么算 就是提前 可以知道这个运算的结果
比如说
12 & 13
134 | 234
98 ^ 7
等等 这些

回复内容:

关于php的位运算 手册中 是这样介绍的

例子 名称 结果
$a & $b And(按位与) 将把 $a 和 $b 中都为 1 的位设为 1。
$a | $b Or(按位或) 将把 $a 或者 $b 中为 1 的位设为 1。
$a ^ $b Xor(按位异或) 将把 $a 和 $b 中不同的位设为 1。
~ $a Not(按位非) 将 $a 中为 0 的位设为 1,反之亦然。
$a $a >> $b Shift right(右移) 将 $a 中的位向右移动 $b 次(每一次移动都表示“除以 2”)。

但是 我想知道 应该怎么算 就是提前 可以知道这个运算的结果
比如说
12 & 13
134 | 234
98 ^ 7
等等 这些

如果我没理解错的话 ... 你要问的是如何手动进行位运算对吧 ...

位运算是二进制的运算方式 ... 你想做十进制数字的位运算操作的话先要将它们转成二进制 ...

如何手动转化进制我就不赘述了 ... 你可以自己去看 ... 主要说位运算 ...

立即学习PHP免费学习笔记(深入)”;

假如我们有两个数字 123 和 321 ... 转化成二进制之后是 001111011 和 101000001 ...

我们从字面意思上理解 ... 按位与 ... 就是按照每一位做 与 这个操作 ... 如下 ...

   001111011
 & 101000001
-------------
   001000001  = 65

也就是说 123 & 321 = 65 ... 按位或按位异或 皆同此理 ... 很简单我就不写了 ...

按位非 ... 单纯的为当前数字取反 ... 比如我们手动计算 ~123 的过程如下 ...

 ~ 000 ... 001111011
---------------------
   111 ... 110000100  = 看上去很大的数字

我想这个问题你也注意到了 ... 把一个数字 按位非 之后 ... 前面会产生很多很多的 1 ...

会导致这个数字看上去非常大 ... 大到难以计算 ...

但事实上不是 ... 我们的操作系统无法存储无限大的整数 ...

LM Studio
LM Studio

LM Studio 是一个桌面应用程序,可以在本地计算机上运行 LLM大语言模型。

下载

事实上它只能存储从 0 开始到 2 的 n 次方的所有数字 ... n 可以很大但不是无限大 ...

但这产生了一个新的问题 ... 就是操作系统不认识负数 ... 而负数又很常见 ...

所以人们又约定 ... 当一个二进制数字长度是 n 且最高位是 1 的时候 ... 就表示这是一个负数 ...

也就是操作系统接受了负的 2 的 n - 1 次方到 2 的 n 次方 - 1 这个范围内的整数 ... 很完美 ...

回到问题上来 ... 那么看起来很大的这个数字其实是个负数 ... 负多少呢 ..?

算法是这样 ... 去掉最高位之后做按位非操作 ... 然后加上负号再减一 ...

也就是 ~123 = -(~(~123))-1 = -124124 ... 原理很复杂但表现起来超简单 ...

接下来 左移右移 ... 一样是字面的意思 ... 比如 123

     001111011   << 2
---------------
   00111101100  = 492

左移的时候空出来的位补零 ... 右移的时候多出去的位直接丢弃 ...

也就是说所有数字如果不停左移或者右移的话 ... 最后结果一定是 0 ...

写到这儿突然感觉好像是在跟小朋友讲基础知识一样 ... 嘛 ... 总之就是这样啦 ...

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Word 字间距调整方法汇总
Word 字间距调整方法汇总

本专题整合了Word字间距调整方法,阅读下面的文章了解更详细操作。

2

2025.12.24

任务管理器教程
任务管理器教程

本专题整合了任务管理器相关教程,阅读下面的文章了解更多详细操作。

2

2025.12.24

AppleID格式
AppleID格式

本专题整合了AppleID相关内容,阅读专题下面的文章了解更多详细教程。

0

2025.12.24

csgo视频观看入口合集
csgo视频观看入口合集

本专题整合了csgo观看入口合集,阅读下面的文章了知道更多入口地址。

29

2025.12.24

yandex外贸入口合集
yandex外贸入口合集

本专题汇总了yandex外贸入口地址,阅读下面的文章了解更多内容。

58

2025.12.24

添加脚注通用方法
添加脚注通用方法

本专题整合了添加脚注方法合集,阅读专题下面的文章了解更多内容。

1

2025.12.24

重启电脑教程汇总
重启电脑教程汇总

本专题整合了重启电脑操作教程,阅读下面的文章了解更多详细教程。

3

2025.12.24

纸张尺寸汇总
纸张尺寸汇总

本专题整合了纸张尺寸相关内容,阅读专题下面的文章了解更多内容。

5

2025.12.24

Java Spring Boot 微服务实战
Java Spring Boot 微服务实战

本专题深入讲解 Java Spring Boot 在微服务架构中的应用,内容涵盖服务注册与发现、REST API开发、配置中心、负载均衡、熔断与限流、日志与监控。通过实际项目案例(如电商订单系统),帮助开发者掌握 从单体应用迁移到高可用微服务系统的完整流程与实战能力。

1

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 7.7万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 6.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号