位运算符允许对整型数中指定的位进行求值和操作。
位运算符
例子 | 名称 | 结果 |
---|---|---|
$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”)。 |
如果 &
、|
和^
运算符的左右两个操作对象都是字符串,将对会组成字符串的字符 ASCII
值执行操作,结果也是一个字符串。除此之外,两个操作对象都将 转换为整数 ,结果也将会是整数。
例如使用&
位运算符时,只要等式两边其中有一个是整形,php就会把等式两边当做整形来处理,先把两边整形转变成二进制的数字,再对二进制数字上的0
和1
进行比较,把都是1的位返回,即
129 & 128 = 10000001 & 10000000 = 10000000 = 128
7 & 3 = 111 & 011 = 11 = 3
8 & 3 = 1000 & 0011 = 0000 = 0
测试代码:
$and = [
(1 & 3),
(1 & '3'),
('1' & 3),
('1' & '3'),
(1 & 4),
(1 & '4'),
('1' & 4),
('1' & '4'),
(129 & 5),
('129' & 5),
(129 & '5'),
('129' & '5'),
((1+2+4+8) & '15'),
('129' & 15),
(128 & 328),
(128 & '328'),
('128' & 328),
('128' & '328'),
('331' & '531'),
('331' & 531),
];
echo strrev(decbin(331)).'<br>';
echo strrev(decbin(531)).'<br>';
echo strrev(decbin(128)).'<br>';
echo strrev(decbin(328)).'<br>';
Common::dd($and);