位运算算法:&,|, ^,~, >>, <<

1.常量定义:

写法一:define ("AYX",0.08);

写法二:const AYX=0.08;

2.函数引用:

写法一:require 'function.php';

写法二:require_once 'function.php';

写法三:include 'function.php';

写法四:include_once 'function.php';

函数名不区分大小写

3.二进制:

最高位为符号位,正数为0,负数为1

原码:用二进制来表示一个数

例:0000000 00000000 00000000 00000001(1 32位 4字节)

正数的原码,反码,补码都一样

负数的反码:原码符号位不变,其他位取反

负数的补码:反码+1

0的反码,补码都是0

php中都是有符号数

计算机运算时,都是以补码形式运算

4.位运算:

按位与:$a & $b

按位或:$a | $b

按位异或:$a ^ $b 不同的位,置1

非:~$a 取反

左移:$a<<$b

右移:$a>>$b

规则:

算术右移:低位溢出,符号位不变,并用符号位补溢出的高位

算术左移:符号位不变,低位补

3*8===3<<3

例子:

1>>2=?

1补码:00000000 00000000 00000000 00000001

1>>2 00000000 00000000 00000000 00000000[补码]->0

例子:

-1>>2=?

-1补码:11111111 11111111 11111111 11111111

-1>>2 11111111 11111111 11111111 11111111[补码]

11111111 11111111 11111111 11111110[反码]

10000000 00000000 00000000 00000001[原码]->-1

1<<2=?

1补码:00000000 00000000 00000000 00000001

1<<2 00000000 00000000 00000000 00000100[补码]->4=1*2*2 每次移动一位,相当于乘以2

例子:

-1<<2=?

-1补码:11111111 11111111 11111111 11111111

-1<<2 11111111 11111111 11111111 11111111[补码]

11111111 11111111 11111111 11111110[反码]

10000000 00000000 0000000000000001[原码]->-1

以上的运算,先转为补码进行运算,得到的结果为补码,再转为原码

例子:13&7=?与

13的补码:00000000 00000000 00000000 00001101

7的补码: 00000000 00000000 0000000000000111

13&7: 00000000 0000000000000000 00000101[补码]->5

例子:5|4=?或

5的补码: 00000000 00000000 00000000 00000101

4的补码: 00000000 00000000 00000000 00000100

5|4=: 00000000 0000000000000000 00000101[补码]->5

例子:-3^3=?异或

-3的原码: 10000000 00000000 00000000 00000011

-3的反码: 11111111 11111111 11111111 11111100

-3的补码: 11111111 11111111 11111111 11111101

3的补码: 00000000 00000000 00000000 00000011

-3^3=: 11111111 1111111111111111 11111001[补码]

11111111 11111111 11111111 11111000[反码] 补码-1

10000000 00000000 0000000000000111[原码]->-2