PHP位运算符的算法与用途

时间:2022-10-13 19:27:56

位运算:针对位进行操作(位只有两种状态:0和1),操作的结果必然也是0和1

程序猿不是直接操作位,而是通过十进制对数据进行“位运算”(计算机内部自动将十进制转换成二进制),运算的结果页是二进制(计算机又会将结果转换成十进制给用户)

位运算符

按位与(&):两个位进行与运算:如果两个都为1,那么结果为1,否则为0

//按位与(&)
var_dump(5 & 3); // 1
//5 00000000 00000000 00000000 00000101
//3 00000000 00000000 00000000 00000011
//&
//  00000000 00000000 00000000 00000001 ====> 1

按位或(|):两个位进行或运算:如果有一个1,则为1,否则0(两个位都为0)

//按位或(|)
var_dump(5 | 3); // 7
//5 00000000 00000000 00000000 00000101
//3 00000000 00000000 00000000 00000011
//|
//  00000000 00000000 00000000 00000111 ====> 7

按位异或(^):两个位进行比较,如果不同则为1,否则0

//按位异或(^)
var_dump(5 ^ 3); // 6
//5 00000000 00000000 00000000 00000101
//3 00000000 00000000 00000000 00000011
//^
//  00000000 00000000 00000000 00000110 ====> 6

按位取反(~):对位上的数据进行取反操作:1变成0,0变成1

//按位取反(~)
var_dump(~5); // -6
//00000000 00000000 00000000 00000101
//~
//11111111 11111111 11111111 11111010
//系统看到符号位为1:认为是负数(系统认为一定的补码)
//求反码:-1
//11111111 11111111 11111111 11111001
//求原码:取反
//10000000 00000000 00000000 00000110 ====> -6

按位左移(<<):将所有的位顺序向左移动,左边移出的丢失,右边空出来的补0,按位左移称之为乘2操作

//按位左移
var_dump(5 << 1); // 10
//00000000 00000000 00000000 00000101
//0000000 00000000 00000000 000001010 ====> 10

按位右移(>>):将所有的位顺序向右移动,右边移出的丢失,左边空出来的补符号位(正数补0,负数补1),按位右移称之为除2操作(向下取整)

//按位右移
    var_dump(5 >> 1); // 2
    //00000000 00000000 00000000 00000101
    //00000000 00000000 00000000 00000010 ====> 2

php中的位运算符在实际应用中可以做用户权限的应用,具体参考:http://blog.csdn.net/e421083458/article/details/12975443