按位运算符如何工作

时间:2015-05-22 06:22:37

标签: php bitwise-operators

我不知道以下代码是如何工作的?

function odd($var){
   return ($var & 1);
}
echo odd(4); /* returns and print 0 */
echo odd(5); /* returns and print 1 */

如果参数是奇数,则此函数返回true 如果参数是偶数,则返回false。 如何运作?

3 个答案:

答案 0 :(得分:4)

二进制奇数始终具有最低有效位(LSB)为1.这就是为什么你的代码

function odd($var){
   return ($var & 1);
}

在奇数上返回true。以下是您问题中的示例:

(decimal) 4 & 1 = (binary) 100 & 001 = (binary) 000 = (decimal) 0 = false
(decimal) 5 & 1 = (binary) 101 & 001 = (binary) 001 = (decimal) 1 = true

另一种思考方式是

    100 (decimal 4) - an even number 
AND 001 (decimal 1)  
  = 000 (decimal 0) - return false  

    101 (decimal 5) - an odd number  
AND 001 (decimal 1)  
  = 001 (decimal 1) - return true  

答案 1 :(得分:4)

按位比较已经说出了它的作用:它逐位比较数字。

如果我们取4位,则4的位表示为:0100.5的位表示为0101.当我们将它与& (和),它返回两个都设置的位。

0100 & 0001 = 0000 (no bits are the same)
0101 & 0001 = 0001 (only Least Significant Bit (LSB) is 1)

答案 2 :(得分:0)

除了0 &是和运算符之外,它屏蔽了所有位。 1是二进制的000000000001。所以它的确有效。