位运算:针对位进行操作(位只有两种状态: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