7.PHP中的运算符2

时间:2022-10-13 18:58:57

上接6.PHP中的运算符1


1.位运算符

php中的位运算符符号

例子 名称 结果
$a & $b And(按位与) 将把 $a 和 $b 中都为 1 的位设为 1。
$a | $b Or(按位或) 将把 $a 和 $b 中任何一个为 1 的位设为 1。
$a ^ $b Xor(按位异或) 将把 $a 和 $b 中一个为 1 另一个为 0 的位设为 1.
~ $a Not(按位取反) $a 中为 0 的位设为 1,反之亦然。
$a << $b Shift left(左移) $a 中的位向左移动 $b 次(每一次移动都表示”乘以 2”)。
$a >> $b Shift right(右移) $a 中的位向右移动$b 次(每一次移动都表示”除以 2”)。

注意:
1. 位运算符还可以与赋值运算符结合,进行位运算赋值操作

$a &= $b;   //等价于   $a = $a&$b;
$a >>= $b   //等价于   $a = $a>>$b
  1. 位运算符时的数据类型为string/integer,分析时要化为二进制形式,但在程序中书写及输出结果时仍为string/integer

  2. 位运算符也可以将boolean类型的值转换为整型再进行按位运算。例如:将true转换为1,再将1换为对应的二进制。

1.1 按位与

1 & 1 ==> 1
1 & 0 ==> 0
0 & 1 ==> 0
0 & 0 ==> 0;

例如:$r1 = 9 & 13;

数字9 0 0 0 0 1 0 0
数字13 0 0 0 0 1 1 0
结果$r1 0 0 0 0 1 0 0

1.2 按位或

//1 | 1 ==> 1;
//1 | 0 ==> 1;
//0 | 1 ==> 1
//0 | 0 ==> 0

$a = 20;
$b = 30;
$c = $a | $b;
echo $c;//30

1.3 按位非

~ 1 ==> 0
~ 0 ==> 1

1.4 按位异或

1 ^ 1 ==> 0
0 ^ 0 ==> 0
1 ^ 0 ==> 1
0 ^ 1 ==> 1

1.5 &&&,|||的区别

逻辑运算符中的逻辑与’&&’和逻辑或’||’存在短路问题。详见上一篇博客。

位运算符中的按位与”&”和按位或”|”,作为逻辑判断时则不存在短路的问题。它们不会判断其前面的表达式是true还是false
,两边的表达式都会执行。

$bool = false;  //声明一个boolean型变量,值为假
$num = 10;  //声明一个整型的变量作为计数使用

if($bool && ($num++ > 0)){  //"&&"前面的表达式为false,发生短路,$num++没有执行到,$num的值保持不变
    echo "条件不成立!";
}
echo $num;

if($bool & ($num++ > 0 )){//"&"不会发生短路,两边都会执行到,$num++被执行,$num自增1
    echo "条件不成立!";
}

echo $num."<br/>";

$bool = true;  //声明一个boolean型变量,值为假
$num = 10;  //声明一个整型的变量作为计数使用

if($bool || ($num++ > 0)){  //"&&"前面的表达式为false,发生短路,$num++没有执行到,$num的值保持不变
    echo "条件不成立!";
}
echo $num;

if($bool | ($num++ > 0 )){//"&"不会发生短路,两边都会执行到,$num++被执行,$num自增1
    echo "条件不成立!";
}

echo $num;

1.6 按位左移运算:<<

形式:

A << n; //A是一个要被移动的数字,同样可以是普通数字,但按二进制去运算,n是一个指定要移动的位数

含义:

将数字A的二进制形式的每一个位上的数字往左边移动指定的位数n,则最左边的n位移出去了就不管了,最右边空出来的n位,补0就可以。

例如:$r1 = 9 << 2; //9的二进制形式为:1001

数字9 0 0 0 0 1 0 0 1
左移2位 0 0 1 0 0 1 0 0
结果 0 0 25 0 0 22 0 0

可见结果是:32 + 4 = 36

1.6 按位右移运算:>>

形式:

A >> n; //A是一个要被移动的数字,同样可以是普通数字,但按二进制去运算,n是一个指定要移动的位数

含义:

将数字A的二进制形式的每一个位上的数字往右边移动指定的位数n,则最右边的n位移出去了就不管了,最左边空出来的n位,补0就可以(对正数,实际是补符号位)。