/*
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中的位运算与位移运算(其它语言通用)的更多相关文章

  1. Java中的位运算符、移位运算

    一.位运算 Java中有4个位运算,它们的运算规则如下: (1)按位与 (&)  :两位全为1,结果为1,否则为0: (2)按位或  (|)   :两位有一个为1,结果为1,否则为0: (3) ...

  2. Java学习日记基础篇(八) —— 二进制、位运算、位移运算

    二进制 二进制是逢2进位的进位置,0,1是基本算符 原码反码补码 在基本数据类型那里,有详细解释 二进制的最高位数是符号位:0表示整数,1表示负数 正数的原码,反码,补码都一样 负数的反码 = 它的原 ...

  3. C语言中的位运算的技巧

    一.位运算实例 1.用一个表达式,判断一个数X是否是2的N次方(2,4,8,16.....),不可用循环语句. X:2,4,8,16转化成二进制是10,100,1000,10000.如果减1则变成01 ...

  4. Google Earth Engine 中的位运算

    Google Earth Engine中的位运算 按位运算是编程中一个难点,同时也是在我们后续处理影像数据,尤其要使用影像自带的波段比如QA波段经常会用到的一个东西.通过按位运算我们可以筛选出我们想要 ...

  5. js中的位运算

    按位运算符是把操作数看作一系列单独的位,而不是一个数字值.所以在这之前,不得不提到什么是"位": 数值或字符在内存内都是被存储为0和 1的序列,每个0和1被称之为1个位,比如说10 ...

  6. C语言中的位运算和逻辑运算

    这篇文章来自:http://blog.csdn.net/qp120291570/article/details/8708286 位运算 C语言中的位运算包括与(&),或(|),亦或(^),非( ...

  7. 1<<30 hashMap 中使用位移运算的意义

    static final int MAXIMUM_CAPACITY = 1 << 30; 计算过程已1<<30为例,首先把1转为二进制数字 0000 0000 0000 000 ...

  8. C/C++中的位运算

    位运算     位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位串信息的结果. 位运算符有:     &(按位与).|(按位或) ...

  9. PHP:第一章——PHP中的位运算

    //位运算: /*$a & $b;//And(按位与).$a和$b都为1的被设为1: $a | $b;//(按位或).$a和$b任何一个为1的位被设为1 $a ^ $b;//Xor(按位异或) ...

随机推荐

  1. 数据结构算法C语言实现(六)---2.4一元多项式的表示及相加

    一.简述 利用链表表示稀疏多项式,并基于之前的一些操作(编程实现上还是有所不同的)组合新的操作实现一元多项式的表示及相加. 二.ADT 抽象数据类型一元多项式的定义 ADT Polyomail{ 数据 ...

  2. css优化

    >>.li设置了display:inline-block,会有空隙,可在父元素ul下设置font-size:0 >>.ie下不支持margin:0 auto; >> ...

  3. MOOCULUS微积分-2: 数列与级数学习笔记 2. Series

    此课程(MOOCULUS-2 "Sequences and Series")由Ohio State University于2014年在Coursera平台讲授. PDF格式教材下载 ...

  4. Linux 下的常用工具

    Useful Linux Utilities (This article is under constant construction) ssh 相关文章 How To Change OpenSSH ...

  5. Alpha版本十天冲刺——Day 9

    站立式会议 会议总结 队员 今日完成 问题 明日要做 感想 对学长说的话的感受 鲍亮 无 获取图片未解决 获取图片,发帖接口,争取完成此版本预期功能 不知不觉只剩两天时间了,这两天接连遇到发图片,获取 ...

  6. maven的环境搭建

    maven环境快速搭建 最近,开发中要用到maven,所以对maven进行了简单的学习. .关于maven是什么东东,请参考其它文章. ----------------准备工作------------ ...

  7. FIREFOX A tool for easily making HTTP requests (GET/PUT/POST/DELETE)

    https://addons.mozilla.org/zh-CN/firefox/addon/httprequester/

  8. awk多模式匹配

    awk -F ':' '{if(($1 ~/wlan/)||( $1 ~/Cell/)||($1 ~/Quality*/)) {print $0}}'

  9. nodejs fs module

    fs.watchFile(filename[, options], listener)# Added in: v0.1.31 filename <String> | <Buffer& ...

  10. 第2章 jQuery的选择器

    选择器是jQuery的根基 一. 认识 1.CSS常用的选择器 标签选择器,后代选择器,Id选择器,通配符选择器,类选择器,群组选择器——主流浏览器全部支持 伪类选择器,子选择器,临近选择器等等——不 ...