php学习笔记--位运算

  2进制和位运算

1--计算机的世界里,他们只能识别2进制(0和1可以通过电流简单方便的实现)。
2--2进制里面最高位是用来表示符号的,0为正,1为负。
3--原码是指一个数用2进制表示形态,如3(十进制)原码是00000000 0000000 000000 00000011
4--整数的原码 补码 反码 都是一样的。
5--负数的反码是符号位不变,其他反转。-1的反码如下
    10000000 00000000 00000000 00000001
11111111 11111111 11111111 11111110
6-负数的补码是他的反码+1 例如-1的补码
     原码 10000000 00000000 00000000 00000001
反码 11111111 11111111 11111111 11111110
补码 11111111 11111111 11111111 11111111
7--0的补码还是0
8--在计算机运算的时候都是以补码进行运算的,不管是正数还是负数。
9--位运算有如下几种,(位置还包括符号位)
    1-按位与(&):两个数,相同位置都为1,则为1,否则为0;
    2-按位或(|):两个数,相同位置其中有一个以上为1(1个或2个),就为1,只有两个都为0 ,才为0.
3-按位异或(^):两个数,相同位置其中只有一个为1(只能一个),就为1,两个如果相同就为0.
    4-按位取反(~):把原先为1的变为0,为0的变为1.
exp:
 ~2的值是-3 推算如下。
    补码 00000000 00000000 00000000 00000010
取反 11111111 11111111 11111111 11111101 (这个不是最终答案,因为这个时候状态是补码状态,我们要转为源码)
反码 11111111 11111111 11111111 11111100 (补码-1得到的是反码,反码再逆推原码)
原码 10000000 00000000 00000000 00000011  (结果就是-3了)
10-位移运算
    算术左移:符号为不变,低位补0
    exp: 1<<2
补码  : 00000000 00000000 00000000 00000001
    左移  :00000000 00000000 00000000 00000100
算术右移:低位溢出。符号位不变。并用符号为补充溢出的低位
    exp:1>>2(在计算机中运算都是以补码进行的)
补码  : 00000000 00000000 00000000 00000001
         右移  :00000000 00000000 00000000 00000000     
         exp: -1>>2
 原码  : 10000000 00000000 00000000 00000001
 反码  : 11111111 11111111 11111111 11111110
 补码  :11111111 11111111 11111111 11111111
 右移  : 11111111 11111111 11111111 11111111

你可能感兴趣的:(php位运算)