PHP中的位运算与位移运算(其它语言通用)
/*
PHP中的位运算与位移运算
=======================
二进制Binary:0,1
逢二进1,易于电子信号的传输
原码、反码、补码
二进制最高位是符号位:0为正数,1为负数(左边是高位) 原码:二进制表示的数为原码
对于正数:原码反码补码都一样
1 ----> 0000000 00000000 00000000 00000001
对于负数:
反码:原码的符号位不变,其它位取反
补码:对负数的反码+1
-1原码: ---> 10000000 00000000 00000000 00000001
-1反码: ---> 11111111 11111111 11111111 11111110
-1补码: ---> 11111111 11111111 11111111 11111111
(0的反码补码都是0) PHP中的数据类型都是有符号的
计算机运算的时候,都是以补码的方式来运算的
(不写是正数还是负数,都会被转成补码,然后进行运算) PHP4个位运算符:(所有语言通用)
按位与& 两位全为1,则结果为1
按位或| 两位有1,则结果为1
按位异或^ 两位一个为0,一个为1,结果为1
按位取反~ 0变1,1变0 PHP中的移位运算符:
算术右移>>:低位溢出,符号位不变,并用符号位补溢出的高位
算术左移<<:符号位不变,低位补0 */
echo "<h4>PHP位运算</h4>";
$n1=~2;
echo "$n1"."<br/>";// -3
/*
对2取反推导:
2的原码=反码=补码:
00000000 00000000 00000000 00000010
取反得补码:(计算机是以补码的方式来运算的)
11111111 11111111 11111111 11111101
得最高位为1,则是一个负数的补码,由补码推原码:减1,取反得原码
10000000 00000000 00000000 00000011
二进制原码转十进制,结果为:-3
*/ $n2=~-5;
echo "$n2"."<br/>";//
/*
对-5取反推导:
-5的符号位是1
获取其原码:
10000000 00000000 00000000 00000101
获取反码:(符号位不变,其它位取反)
11111111 11111111 11111111 11111010
获取补码:(反码加1)
11111111 11111111 11111111 11111011
对补码取反:(符号位是0为正数,正数的原码=反码=补码)
00000000 00000000 00000000 00000100
得正数:4
*/ $n3=2&3;
echo "$n3"."<br/>";//
/*
推导:
按位与& :两位全为1,则为1
获取2和3的补码(因为是正数:原码=反码=补码)
2 00000000 00000000 00000000 00000010
3 00000000 00000000 00000000 00000011
按位与:
2&3:00000000 00000000 00000000 00000010
获得结果为正数补码:2
*/ $n4=2|3;
echo "$n4"."<br/>";//
/*
推导:
按位或|:两位有1,则为1
获取2和3的补码(因为是正数:原码=反码=补码)
2 00000000 00000000 00000000 00000010
3 00000000 00000000 00000000 00000011
按位或:
2&3:00000000 00000000 00000000 00000011
获得结果为正数补码:3
*/ $n5=2^3;
echo "$n5"."<br/>";//
/*
推导:
按位异或^:两位不同则为1,否则为0
获取2和3的补码(因为是正数:原码=反码=补码)
2 00000000 00000000 00000000 00000010
3 00000000 00000000 00000000 00000011
按位或:
2&3:00000000 00000000 00000000 00000001
获得结果为正数补码:1
*/ $n6=-3^3;
echo "$n6"."<br/>";//
/*
推导:
获取-3的补码:
-3原码:10000000 00000000 00000000 00000011
-3反码:11111111 11111111 11111111 11111100 -3补码:11111111 11111111 11111111 11111101
获取3的补码:
3 补码:00000000 00000000 00000000 00000011 按位异或:
-3^3 11111111 11111111 11111111 11111110
因为结果是负数的补码,则需要获取其原码:
反码 11111111 11111111 11111111 11111101 原码 10000000 00000000 00000000 00000010
得结果为:-2
*/ echo "<h4>PHP位移运算</h4>";
// 算术右移>>:低位溢出,符号位不变,并用符号位补溢出的高位
// 算术左移<<:符号位不变,低位补0 $a1= 1>>2;
echo "a1=.$a1"."<br/>";//
/*
推导:
算术右移>>:低位溢出,符号位不变,并用符号位补溢出的高位
1的二进制向右移动两位,用符号位0补高位的两个空缺
00000000 00000000 00000000 00000001
1>>2:
00000000 00000000 00000000 00000000
结果:0
*/ $b1=-1>>2;
echo "b1=.$b1"."<br/>";//-1
/*
推导:
算术右移>>:低位溢出,符号位不变,并用符号位补溢出的高位
-1的的补码:
原码:10000000 00000000 00000000 00000001
反码:11111111 11111111 11111111 11111110
补码:11111111 11111111 11111111 11111111
-1>>2:相当于
11111111 11111111 11111111 11111111
得结果补码再取原码为:-1
*/ $c1=1<<2;
echo "c1=.$c1"."<br/>";// /*
推导:
算术左移<<:符号位不变,低位补0
1的补码:00000000 00000000 00000000 00000001
1<<2: 左移两位,低位补0 (相当于1*2*2)
00000000 00000000 00000000 00000100
得结果补码再取原码为:4
*/ $d1=-1<<2;
echo "d1=.$d1"."<br/>";//-4
// (相当于-1*2*2) 结果为:-4
// 推导:
// 算术左移<<:符号位不变,低位补0
// -1的补码:11111111 11111111 11111111 11111111
// -1<<2: 左移两位,低位补0
// 得结果
// 补码 11111111 11111111 11111111 11111100
// 反码 11111111 11111111 11111111 11111011
// 原码 10000000 00000000 00000000 00000100
// 结果:-4 ?>
PHP中的位运算与位移运算(其它语言通用)的更多相关文章
- Java中的位运算符、移位运算
一.位运算 Java中有4个位运算,它们的运算规则如下: (1)按位与 (&) :两位全为1,结果为1,否则为0: (2)按位或 (|) :两位有一个为1,结果为1,否则为0: (3) ...
- Java学习日记基础篇(八) —— 二进制、位运算、位移运算
二进制 二进制是逢2进位的进位置,0,1是基本算符 原码反码补码 在基本数据类型那里,有详细解释 二进制的最高位数是符号位:0表示整数,1表示负数 正数的原码,反码,补码都一样 负数的反码 = 它的原 ...
- C语言中的位运算的技巧
一.位运算实例 1.用一个表达式,判断一个数X是否是2的N次方(2,4,8,16.....),不可用循环语句. X:2,4,8,16转化成二进制是10,100,1000,10000.如果减1则变成01 ...
- Google Earth Engine 中的位运算
Google Earth Engine中的位运算 按位运算是编程中一个难点,同时也是在我们后续处理影像数据,尤其要使用影像自带的波段比如QA波段经常会用到的一个东西.通过按位运算我们可以筛选出我们想要 ...
- js中的位运算
按位运算符是把操作数看作一系列单独的位,而不是一个数字值.所以在这之前,不得不提到什么是"位": 数值或字符在内存内都是被存储为0和 1的序列,每个0和1被称之为1个位,比如说10 ...
- C语言中的位运算和逻辑运算
这篇文章来自:http://blog.csdn.net/qp120291570/article/details/8708286 位运算 C语言中的位运算包括与(&),或(|),亦或(^),非( ...
- 1<<30 hashMap 中使用位移运算的意义
static final int MAXIMUM_CAPACITY = 1 << 30; 计算过程已1<<30为例,首先把1转为二进制数字 0000 0000 0000 000 ...
- C/C++中的位运算
位运算 位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位串信息的结果. 位运算符有: &(按位与).|(按位或) ...
- PHP:第一章——PHP中的位运算
//位运算: /*$a & $b;//And(按位与).$a和$b都为1的被设为1: $a | $b;//(按位或).$a和$b任何一个为1的位被设为1 $a ^ $b;//Xor(按位异或) ...
随机推荐
- <转>iOS9 Day-by-Day:iOS开发者必须了解的iOS 9新技术与API
iOS9 Day-by-Day是作者Chris Grant新开的一个系列博客,覆盖了iOS开发者必须知道的关于iOS 9的新技术与API,并且还进行了实际操作演练,每篇文章中相关的代码Chris都会将 ...
- CentOS编译安装nodejs
1. 从node.js官网下载最新版的node.js安装包,node.tar.gz wget https://nodejs.org/dist/v4.3.1/node-v4.3.1.tar.gz ...
- UVA 10679 I Love Strings
传送门 题目大意 给定文本串$S$和若干模式串$\{T\}$, 对每个模式串$T$, 询问$T$是否为$S$的子串. Solution 裸的AC自动机, 也可以用后缀数组做. P.S. 这题数据很弱, ...
- java连接数据源-读取tomcat数据源配置
读取数据源配置,获取连接 1.配置数据源 D:\apache-tomcat-7.0.70\conf\context.xml <Resource name="jdbc/news" ...
- 【Alpha阶段】第五次Scrum例会
由于软工整个项目规划延期1周,我们将停止2天的Scrum,进行相应的修整 会议信息 时间:2016.10.21 22:30 时长:20min 地点:大运村1号公寓5楼楼道 类型:日常Scrum会议 个 ...
- UVALive 3989Ladies' Choice(稳定婚姻问题)
题目链接 题意:n个男生和女生,先是n行n个数,表示每一个女生对男生的好感值排序,然后是n行n列式每一个男生的好感值排序,输出N行,即每个女生在最好情况下的男生的编号 分析:如果是求女生的最好情况下, ...
- 通过命令行连接Wifi
前提:无线网卡驱动正常安装 1.检查连接无线的接口 $ iwconfig 一般无线接口为wlan0 2.检查无线接口是否工作 $ sudo ip link set wlan0 up 3.扫描周围无线网 ...
- SQL Server编程(06)触发器
SQL Server 通过触发器用来保证业务逻辑和数据的完整性.在SQL Server中,触发器是一种特殊类型的存储过程,可在执行语言事件时自动触发.SQL Server中触发器包括三种:DML触发器 ...
- PHP中“简单工厂模式”实例讲解
原创文章,转载请注明出处:http://www.cnblogs.com/hongfei/archive/2012/07/07/2580776.html 简单工厂模式:①抽象基类:类中定义抽象一些方法, ...
- Spring事务传播简介
一.事务传播属性(propagation) 1.REQUIRED,默认属性 此级别下,会为每一个调用的方法创建一个逻辑事务域,如果前面的方法已经创建了事务,那么后面的方法支持当前事务,如果当前没有事务 ...