阅读模式:

php位运算

查看:1932  回复:0  类型:  来源:php自学网  标签 php

        位运算符允许对整型数中指定的位进行求值和操作。进行位运算时会先转为二进制,然后再做响应的计算处理。

        进制转换工具

        位运算符一览表:

运算符号

意义

运算对象类型

运算结果类型

实例

~

非运算

整型,字符型

整型

~a

&

与运算

a & b

|

或运算

a | b

^

异或运算

a ^ b

<<

位左移运算

a<<4

>>

位右移运算

a>>2

一、& 与

    对应的两个二进制位都为1时,结果位为1,否则为0。

    如:5和6,二进制分别为101、110,5&6结果位4。

<?php
    echo 5&6;  //4
?> 

101
110
-------
100

// 4

#把100转为10进制结果为4

二、| 或

    对应的两个二进制位只要有一个为1时,结果位为1,否则为0。

    如:5和6,二进制分别为101、110,5|6结果位7。

<?php
    echo 5|6;  //7
?> 

101
110
-------
111

// 7

#把111转为10进制结果为7

三、^ 异或

    对应的两个二进制位不同时,结果位为1,否为为0。

    如:5和6,二进制分别为101、110,5^6结果位3。

<?php
    echo 5^6;  //3
?> 

101
110
-------
011

// 3

#把011转为10进制结果为3

四、~ 取反

    对应的每个二进制位取反。

    如:5,二进制为101,~5结果位-6。

<?php
    echo ~5;  //-6
?> 

101
-------
010

// 1.用32位表示二进制

0000 0000 0000 0000  0000 0000 0000 0101
---------------------------------------------------
1111 1111 1111 1111  1111 1111 1111 0010

// 2.取反后的32位二进制值为 1111 1111 1111 1111  1111 1111 1111 0010  ,看第一位,第1位是1时为负数,否者为正数,这里是负数。

1111 1111 1111 1111  1111 1111 1111 0 010
-----------------------------------------------------
 111 1111 1111 1111  1111 1111 1111 0 010
 
// 3.负数是用补码表示的,补码是原码取反+1,所以这里要反过来处理
    // 3.1 减1
    111 1111 1111 1111  1111 1111 1111 0 010
    ----------------------------------------------------
    111 1111 1111 1111  1111 1111 1111 0 001
    
    // 3.2 取反
    111 1111 1111 1111  1111 1111 1111 0 001
    ----------------------------------------------------
    000 0000 0000 0000  0000 0000 0000 0 110

// 4.所以110转10进制为6,这里是负数,最终结果为-6
//2进制转10进制
110
1*2²+1*2¹+0*2º = 6
= -6

五、<< 左移

    对应的各个二进制位全部左移n位,高位要放弃,低位补0,由于左移后丢弃符号位,可能会改变数字的正负性。

    如:5,二进制分别为101,5<<1左移一位结果为10。

<?php
    echo 5<<1;  //10
?> 

 0000 0000 0000 0000  0000 0000 0000 0101
-----------------------------------------
000 0000 0000 0000  0000 0000 0000 01010

// 10

#把1010转为10进制结果为10

位移计算规律:

5<<1 = 5*2¹ = 10

5<<2 = 5*2² = 20

5<<3 = 5*2³ = 40

六、<< 右移

    对应的各个二进制位全部左移n位,符号位保持不变。为正数时,符号位为0,最高位补0。 为负数时,符号位为1。

    如:5,二进制分别为101,5>>1左移一位结果为2。

<?php
    echo 5>>1;  //2
?> 

 0000 0000 0000 0000  0000 0000 0000 0101
-----------------------------------------
  00000 0000 0000 0000  0000 0000 0000 010

// 2

#把10转为10进制结果为2

位移计算规律:

8>>1 = 8/2¹ = 4

8>>2 = 8/2² = 2

8>>3 = 8/2³ = 1

分享到:
1 0

*有问题之处烦请在评论中指出非常感谢!
不是我想要的内容,继续搜索:

扫描二维码手机查看

发布评论:


登录:
  表情:
评论话题
推荐阅读:
HTTP 1.1 协议详解   阅读:16884centos7.3安装mongodb3.6   阅读:9315分享:淘宝技术这十年   阅读:5916爱编程,也爱健康   阅读:5685程序员找工作三要素(必看)   阅读:6938php+redis实现消息队列   阅读:17804linux php7安装yaf扩展   阅读:10343csv文件一键导入数据到mysql数据库   阅读:8269php显示刚刚、几分钟前、几小时前、几天前的函数   阅读:10451html5 离线缓存的使用   阅读:5469linux时间戳有趣的情人节秒1234567890   阅读:6809centos 7 忘记root密码   阅读:6365最简单的Banner轮播淡入淡出效果代码及实现思路(附带源码)   阅读:15750人性漫画:打工与创业的残酷区别   阅读:6370nginx安装mysql和json模块   阅读:7399centos 7 忘记root密码   阅读:6365最新centos7 搭建LNMP环境(centos7.2+php7+mysql5.7+nginx1.11+redis3.2)   阅读:12736一步步带你,如何网站架构   阅读:5488centos 7搭建zabbix3.4   阅读:8042linux rarcrack破解rar、zip和7z压缩包简单密码的工具   阅读:20370centos 7 设置 nginx-1.11.10 开机启动   阅读:9534mysql中文分词全文搜索索引讯搜的安装   阅读:8802php 读取和设置redis的键值   阅读:8783mysql中文分词全文搜索索引讯搜的安装   阅读:8802php打印九九加法表   阅读:13397给网站添加一键qq登录的功能   阅读:9212纯干货,程序员面试的超实用技巧   阅读:5513给网站添加一键qq登录的功能   阅读:9212最简单的Banner轮播淡入淡出效果代码及实现思路(附带源码)   阅读:15750linux时间戳有趣的情人节秒1234567890   阅读:6809centos 7 忘记root密码   阅读:6365最新centos7 搭建LNMP环境(centos7.2+php7+mysql5.7+nginx1.11+redis3.2)   阅读:12736给网站添加一键qq登录的功能   阅读:9212javascript获取两个日期间的所有日期   阅读:8463crontab+shell脚本实现定时备份mysql数据库   阅读:9206linux命令中执行php脚本   阅读:10064纯干货,程序员面试的超实用技巧   阅读:5513php文件下载防盗链   阅读:11600HTTP 1.1 协议详解   阅读:16884mysql5.7开启sql日志的配置   阅读:11606mysql5.7主从同步配置   阅读:8737纯干货,程序员面试的超实用技巧   阅读:5513mysql中文分词全文搜索索引讯搜的安装   阅读:8802centos 7.2 添加php7 的 php-fpm 开机启动   阅读:27754面试的时候回去等通知,等电话的真实意思   阅读:27773php 使用 smtp.php 类在线发送邮件功能   阅读:7175php中地址引用&的真正理解-变量引用、函数引用、对象引用   阅读:7417php删除一个文件夹内的所有文件夹和文件   阅读:6294javascript点击复制内容   阅读:8900mysql5.7主从同步中binlog同步模式详解   阅读:10226