PHP 位运算符
位运算符
位运算符是指对二进制位从低位到高位对齐后进行运算。
符号 | 作用 | 举例 | 个人理解 |
---|---|---|---|
& | 按位与 | $m & $n |
全1为1,否则为0 |
| | 按位或 | $m | $n |
全0为0,有1为1 |
^ | 按位异或 | $m | $n |
不同为1,相同为0 |
~ | 按位取反 | ~$m |
|
<< | 向左移位 | $m << $n |
|
>> | 向右移位 | $m >> $n |
正数的原码,反码、补码都是一样的,负数不一样
原码:数字的8位 二进制,符号位(第一位)为0表示正数,为1表示负数
反码:正数反码与原码一样,负数的反码是符号位1不变,整数的每一位二进制数位求反,得到反码
补码:正数补码与原码一样,负数反码的符号位1不变,按位取反,末尾(最低位)加1;计算机中的运算都是以补码的形式运算的,存储也是补码
- 补码的特性:
1、一个负整数(或原码)与其补数(或补码)相加,和为模。
2、对一个整数的补码再求补码,等于该整数自身。
3、补码的正零与负零表示方法相同。
&运算符
- <?php
- $m = 1;
- $n = 2;
- $mn = $m & $n;
- echo $mn;
运行结果为0
解释:将1,2分别转换为二进制(8 位)为
00000001
00000010
在按位与的过程中,按位比较,全1为1,比较结果为00000000,所以输出0。
负数的 & 运算
以2&-7=?计算为例:
(1)、计算2的补码: 2->原码:00000010->反码:00000010->补码:00000010
(2)、计算-7的补码: -7->原码:10000111->反码:11111000->补码:11111001
(3)、计算2&-7的补码->反码->原码 2&-7补码:00000000->反码:00000000->原码:00000000
(4)、有2&-7原码得到2&-7的值 所以2&-7 = 0
| 运算符
- <?php
- $m = 1;
- $n = 2;
- $mn = $m | $n;
- echo $mn;
运行结果为3,同样,转换成如上的二进制
00000001
00000010
在按位或的过程中,有1为1,全0为0,则结果为00000011,所以输出3。
^运算符
- <?php
- $m = 1;
- $n = 2;
- $mn = $m ^ $n;
- echo $mn;
运行结果为3,同样,转换成如上的二进制
00000001
00000010
在按位亦或的过程中,不同为1,相同为0,所以结果为00000011,进而输出3。
~运算符
- <?php
- $m = 2;
- $m1 = ~$m;
- echo $m1;
运行结果为-3,此处引人深思。
注:在计算机中,负数以其正值的补码形式表达。
1: 2的32位原码为 0000 0000 0000 0000 0000 0000 0000 0010
2: 按位取反后为 1111 1111 1111 1111 1111 1111 1111 1101
由于最前面的数为1,符号位为1,即为负数,所以,以其正值的补码形式表示为:(反码的符号位不变,按位取反,末尾加1)
1000 0000 0000 0000 0000 0000 0000 0011
所以输出为-3。
<<运算符
- <?php
- $m = 3;
- $m1=$m << 1;
- echo $m1;
运算结果为6
左移运算的实质是将对应的数据的二进制值逐位左移若干位,并在空出的位置上填0,最高位溢出并舍弃。
3的32位原码为,0000 0000 0000 0000 0000 0000 0000 0011
左移一位:0000 0000 0000 0000 0000 0000 0000 0110
所以为6
根据手册描述可以看出位运算可以看出向左移一位,则是实现乘2运算。由于位移操作的运算速度比乘法的 运算速度高很多。因此在处理数据的乘法运算的时,采用位移运算可以获得较快的速度。
提示 将所有对2的乘法运算转换为位移运算,可提高程序的运行效率。
>>运算符
右移一位,和<<运算符,类似,只不过这个是右移。
查看文章:原码、反码、补码之间的转换和简单运算
PHP 位运算符的更多相关文章
- java的布尔运算符和位运算符
1.布尔运算符 && 逻辑与: || 逻辑或: != 不等于: 三元操作符:?: :表达式为 condition?expression1:expression2(当条件为真时 ...
- c 语言的位运算符复习
转载和修正,原文连接:http://www.cnblogs.com/911/archive/2008/05/20/1203477.html 位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进 ...
- Java的算数运算符、关系运算符、逻辑运算符、位运算符
JAVA的运算符,分为四类: 算数运算符.关系运算符.逻辑运算符.位运算符 算数运算符(9):+ - * / % ++ -- 关系运算符(6):== != > >= & ...
- c语言基础表达式, 关系运算符, 逻辑运算符, 位运算符, 数据的取值范围, 分支结构(if...else, switch...case)
1.表达式: 表达式的判断是有无结果(值), 最简单的表达式是一个常量或变量, 如:12, a, 3 + 1, a + b, a + 5 都是表达式 2.BOOL(布尔)数据类型: c语言中除了基本数 ...
- PHP中的运算符---位运算符、递增递减运算符、三元运算符、字符串运算符、数组运算符、类型运算符、错误控制运算符
1.位运算符 位运算符用来对整型数的指定位进行置位,如果被操作数是字符串,则对该字符串的ASCII码值进行操作. 运算类型 运算符 举例 结果 按位与 & $a & $b 将$a 与 ...
- ECMAScript 位运算符
位运算符是在数字底层(即表示数字的 32 个数位)进行操作的. 重温整数 ECMAScript 整数有两种类型,即有符号整数(允许用正数和负数)和无符号整数(只允许用正数).在 ECMAScript ...
- javascript运算符——位运算符
× 目录 [1]二进制 [2]非 [3]与[4]或[5]异或[6]左移[7]右移[8]>>>[9]应用 前面的话 位运算符是非常底层的运算,由于其很不直观,所以并不常用.但是,其速度 ...
- PHP中为位运算符(几乎很少用)
PHP语言里的位运算符&.|.^ .~.〈〈 .〉〉 "&" 按位与运算 按位与运算符"&"是双目运算符.其功能是参与运算的两数各对应的 ...
- PHP运算符:算数运算符、逻辑运算符、三目运算符、位运算符、字符串运算符。
赋值运算符 PHP 赋值运算符用于向变量写值. PHP 中基础的赋值运算符是 "=". 这意味着右侧复制表达式会为左侧运算数设置值. _______________________ ...
- Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)
位运算符主要针对二进制,它包括了:“与”.“非”.“或”.“异或”.从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算.下面 ...
随机推荐
- Java 计算两个日期相差的天数
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...
- Docker学习笔记_Dockerfile基本知识
Dockerfile由一行行命令语句组成,并支持以#开头的注释行. 1.编写一个Dockerfile文件 创建一个空的Docker工作目录,进入该目录,使用sudo vim Dockerfile指令新 ...
- sencha表单入门例子
来自于<sencha touch 权威指南> ------------------------------- 一.网站结构 二.index.html代码 <!DOCTYPE HTML ...
- jquery dropdownlist.js
$.fn.extend({ SetDict: function (option) { var txtControl = $(this); if (!txtControl.hasClass(" ...
- 学习如何用VS2010创建ocx控件
1参考文章 (1)这一篇将使用vc创建ocx控件:http://blog.csdn.net/jiadelin/article/details/2917225 (2)这一篇文章有关vs2010创建act ...
- DB2触发器简单例子
db2使用版本9.7 创建A .B两个表,A表数据有更新.删除.插入时,将A表ID记录放入B表 1.create table A (id varchar(5),name varchar(30)); c ...
- Windows 下 MongoDb 简单配置
以管理员的启动cmd 进入安装目录下 输入: mongod --auth --port 3406 --dbpath=库地址 --logp ...
- Android学习笔记 - 开始
因为项目需求,要在Android上开发一个证件识别软件,项目时间 9/10- 9/30 工作内容: (1)修改证件识别库 (2)移植证件识别库至Android (3)开发一个Android应用程序 学 ...
- Regex 常用的正则表达式
.校验数字的表达式 数字:^[0-9]*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n,}$ m-n位的数字:^\d{m,n}$ 零和非零开头的数字:^(0|[1-9][0-9]*)$ 非 ...
- 离线安装 python 第三方库
离线安装 python 第三方库 首先你需要在联网的服务器上已经安装了一个第三方库,比如是paramiko,也就是说你已经执行了 pip install paramiko ,小提示: 如果在安 ...