PHP 位运算符

位运算符在开发中用到的比较少,这里写出来只是做个记录。这里我们需要清楚两个概念:

1.什么是逻辑运算符 : 简单点来说,逻辑运算符只会对结果返回true或false。

2.什么是位运算符 : 位运算符并不会对结果返回布尔(boolean)值,而是进行数学运算。

$a & $b And (按位与) :将$a和$b同时为1的位,置为1

比如数字 1 & 2 = 00000001 & 00000010 = 0

$a | $b Or(按位或) : 将$a或$b为1的位,置为1

比如数字 1 | 2 = 00000001 | 00000010 = 3

$a ^ $b Xor(按位异或) :将$a或$b中一个为0,另一个为1的位,置为1

比如数字 1 ^ 2 = 00000001 | 00000010 = 3

这里需要理清按位或和按位异或的区别,按位或的话如果两个位都位1会置为1,反正只要有其中有一个为1就可以。但是按位异或不行,它要求必须一个为1,另一个为0才置为1。

 ~ $b Not(按位取反) :将$b中为0的位,置为1,为1的位,置为0

比如 ~2 

1. 2的二进制(比如我的计算机是32位的) = 0000 0000 0000 0000 0000 0000 0000 0010

2. 按位取反 = 1111 1111 1111 1111 1111 1111 1111 1101

3. = -3

按位取反的求值方式要比上面几个位运算符复杂些。现代计算机普遍使用补码表示负数。知道一个数的补码,首先看它的最左一位(0代表正,1代表负)。对其取反后再加1,得到源码。

现在按位取反的二进制数为:1111 1111 1111 1111 1111 1111 1111 1101,现在再对其进行取反然后加

1。0000 0000 0000 0000 0000 0000 0000 0010 + 1  = 0000 0000 0000 0000 0000 0000 0000 0011 = -3

按位取反的本质是对数字进行求负运算,再减1。比如上面的~2可以快速计算出结果:~2 = -2 - 1 = -3

$a << $b Shift left(左移) : 将$a中的位向左移动$b次,每移动一次代表乘以2

比如 2 << 2 = 0000 0010 << 2 

= 0000 1000

= 4

$a >> $b Shift right(右移) : 将$a中的位向右移动$b次,每移动一次代表除以2

比如在 2 >> 2  = 0000 0010 >> 2

= 0000 0000

= 0  

你可能感兴趣的:(PHP)