位运算符

位运算符是指对二进制位从低位到高位对齐后进行运算。

符号 作用 举例 个人理解
& 按位与 $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.    补码的特性:
        1、一个负整数(或原码)与其补数(或补码)相加,和为模。
        2、对一个整数的补码再求补码,等于该整数自身。
        3、补码的正零与负零表示方法相同。
      

&运算符

  1. <?php
  2. $m = 1;
  3. $n = 2;
  4. $mn = $m & $n;
  5. 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

  1.  

| 运算符

  1. <?php
  2. $m = 1;
  3. $n = 2;
  4. $mn = $m | $n;
  5. echo $mn;

运行结果为3,同样,转换成如上的二进制

00000001

00000010

在按位或的过程中,有1为1,全0为0,则结果为00000011,所以输出3。

^运算符

  1. <?php
  2. $m = 1;
  3. $n = 2;
  4. $mn = $m ^ $n;
  5. echo $mn;

运行结果为3,同样,转换成如上的二进制

00000001

00000010

在按位亦或的过程中,不同为1,相同为0,所以结果为00000011,进而输出3。

~运算符

  1. <?php
  2. $m = 2;
  3. $m1 = ~$m;
  4. 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。

<<运算符

  1. <?php
  2. $m = 3;
  3. $m1=$m << 1;
  4. 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位运算详解

PHP位运算符详解

PHP 位运算符的更多相关文章

  1. java的布尔运算符和位运算符

    1.布尔运算符 &&  逻辑与: ||   逻辑或: !=  不等于: 三元操作符:?: :表达式为  condition?expression1:expression2(当条件为真时 ...

  2. c 语言的位运算符复习

    转载和修正,原文连接:http://www.cnblogs.com/911/archive/2008/05/20/1203477.html 位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进 ...

  3. Java的算数运算符、关系运算符、逻辑运算符、位运算符

    JAVA的运算符,分为四类: 算数运算符.关系运算符.逻辑运算符.位运算符 算数运算符(9):+  -  *  /  %  ++  -- 关系运算符(6):==  !=  >  >=  & ...

  4. c语言基础表达式, 关系运算符, 逻辑运算符, 位运算符, 数据的取值范围, 分支结构(if...else, switch...case)

    1.表达式: 表达式的判断是有无结果(值), 最简单的表达式是一个常量或变量, 如:12, a, 3 + 1, a + b, a + 5 都是表达式 2.BOOL(布尔)数据类型: c语言中除了基本数 ...

  5. PHP中的运算符---位运算符、递增递减运算符、三元运算符、字符串运算符、数组运算符、类型运算符、错误控制运算符

    1.位运算符 位运算符用来对整型数的指定位进行置位,如果被操作数是字符串,则对该字符串的ASCII码值进行操作. 运算类型 运算符 举例 结果 按位与 & $a & $b 将$a 与 ...

  6. ECMAScript 位运算符

    位运算符是在数字底层(即表示数字的 32 个数位)进行操作的. 重温整数 ECMAScript 整数有两种类型,即有符号整数(允许用正数和负数)和无符号整数(只允许用正数).在 ECMAScript ...

  7. javascript运算符——位运算符

    × 目录 [1]二进制 [2]非 [3]与[4]或[5]异或[6]左移[7]右移[8]>>>[9]应用 前面的话 位运算符是非常底层的运算,由于其很不直观,所以并不常用.但是,其速度 ...

  8. PHP中为位运算符(几乎很少用)

    PHP语言里的位运算符&.|.^ .~.〈〈 .〉〉 "&" 按位与运算 按位与运算符"&"是双目运算符.其功能是参与运算的两数各对应的 ...

  9. PHP运算符:算数运算符、逻辑运算符、三目运算符、位运算符、字符串运算符。

    赋值运算符 PHP 赋值运算符用于向变量写值. PHP 中基础的赋值运算符是 "=". 这意味着右侧复制表达式会为左侧运算数设置值. _______________________ ...

  10. Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)

    位运算符主要针对二进制,它包括了:“与”.“非”.“或”.“异或”.从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算.下面 ...

随机推荐

  1. Java 计算两个日期相差的天数

    import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...

  2. Docker学习笔记_Dockerfile基本知识

    Dockerfile由一行行命令语句组成,并支持以#开头的注释行. 1.编写一个Dockerfile文件 创建一个空的Docker工作目录,进入该目录,使用sudo vim Dockerfile指令新 ...

  3. sencha表单入门例子

    来自于<sencha touch 权威指南> ------------------------------- 一.网站结构 二.index.html代码 <!DOCTYPE HTML ...

  4. jquery dropdownlist.js

    $.fn.extend({ SetDict: function (option) { var txtControl = $(this); if (!txtControl.hasClass(" ...

  5. 学习如何用VS2010创建ocx控件

    1参考文章 (1)这一篇将使用vc创建ocx控件:http://blog.csdn.net/jiadelin/article/details/2917225 (2)这一篇文章有关vs2010创建act ...

  6. DB2触发器简单例子

    db2使用版本9.7 创建A .B两个表,A表数据有更新.删除.插入时,将A表ID记录放入B表 1.create table A (id varchar(5),name varchar(30)); c ...

  7. Windows 下 MongoDb 简单配置

    以管理员的启动cmd        进入安装目录下                      输入:  mongod  --auth --port 3406  --dbpath=库地址  --logp ...

  8. Android学习笔记 - 开始

    因为项目需求,要在Android上开发一个证件识别软件,项目时间 9/10- 9/30 工作内容: (1)修改证件识别库 (2)移植证件识别库至Android (3)开发一个Android应用程序 学 ...

  9. Regex 常用的正则表达式

    .校验数字的表达式 数字:^[0-9]*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n,}$ m-n位的数字:^\d{m,n}$ 零和非零开头的数字:^(0|[1-9][0-9]*)$ 非 ...

  10. 离线安装 python 第三方库

     离线安装 python 第三方库 首先你需要在联网的服务器上已经安装了一个第三方库,比如是paramiko,也就是说你已经执行了 pip install paramiko    ,小提示: 如果在安 ...