位运算算法:& ,|, ^, ~, >>, <<
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 00000000 00000001[原码]->-1
以上的运算,先转为补码进行运算,得到的结果为补码,再转为原码
例子:13&7=?与
13的补码:00000000 00000000 00000000 00001101
7的补码: 00000000 00000000 00000000 00000111
13&7: 00000000 00000000 00000000 00000101[补码]->5
例子:5|4=?或
5的补码: 00000000 00000000 00000000 00000101
4的补码: 00000000 00000000 00000000 00000100
5|4=: 00000000 00000000 00000000 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 11111111 11111111 11111001[补码]
11111111 11111111 11111111 11111000[反码] 补码-1
10000000 00000000 00000000 00000111[原码]->-2