概念
位运算符允许对整型数中指定的位进行求值和操作。
命令
例子变量 $a = 1; //8位二进制 0000 0001
$b = 3; //8位二进制 0000 0011
命令符号 | 名称 | 例子 | 作用 | 结果 | 二进制 |
---|---|---|---|---|---|
& | And(按位与) | $a & $b | $a与$b中都为1的位,设为1反之则设为0 | 1 | 0000 0001 |
| | Or(按位或) | $a | $b | $a与$b中任何一个为1的位设为1 | 3 | 0000 0011 |
^ | Xor(按位异或) | $a ^ $b | $a与$b中一个为0,一个为1的位,设为1 | 2 | 0000 0010 |
~ | Not(按位取反) | ~ $a | 将 $a 中为 0 的位设为 1,反之亦然。 | -2 | 这个单独分析一下 |
<< | shift left(左移) | $a << 1 | $a往左移一位,也可以理解为每移动一次都乘以2 | 2 | 0000 00 |
>> | shift right(右移) | $a >> 1 | $a往右移一位,也可以理解为每移动一次都除以2 | 0 | 0000 0000 |
分析 ~
首先 1的32位二进制是
原值 :0000 0000 0000 0000 0000 0000 0000 0001
取反: 1111 1111 1111 1111 1111 1111 1111 1110
由于最前面的数为1,符号位为1,即为负数,所以,以其正值的补码形式表示为:(符号位不变,按位取反,末尾加1)
1000 0000 0000 0000 0000 0000 0000 0001
这里末尾加1之后是2,所以满2进1,所以变成
1000 0000 0000 0000 0000 0000 0000 0010
即输出值为-2