一、<< 左移
把整数的各个二进制位全部左移n位,高位要放弃,低位补0,左移n位其实就是乘以2的n次方。
$res = 1 << 6;
echo $res;//64 1*2的6次方
二、>>右移
把整数的各个二进制位全部右移n位,保持符号位不变,右移n位其实就是除以2的n次方。
$res = 64 >> 5;
echo $res;//2 64除以2的5次方
三、& 按位与
只有对应的两个二进制位均为1时候,结果位才会是1,否则为0.
例: 比如9&5,其实就是1001&101 = 1,因此9&5=1
四、 | 按位或
只要对应的两个二进制位有一个为1时,结果位就位1,否则为0。
例: 比如9|5,其实就是1001 | 101 = 1,因此9|5=13;
五、^ 按位异或
对应二进制位相异(不相同)时,结果位1,否则为0.
例: 比如9^5,其实就是1001^ 101 = 1,因此9^5=12
六、~ 按位取反
把每个二进制位取反,它是单目运算符,只操作一个数。
举例: ~9 把9每个二进制位取反。
~0000 0000 0000 0000 0000 0000 0000 1001
1111 1111 1111 1111 1111 1111 1111 0110 开头第一个数是符号位 这里得出为负数
echo ~9; // -10
七、利用位运算判断奇偶性
$a & 1 == 1 //奇数
$a & 1 == 0 //偶数