位运算符是如何工作的?

4
我不理解以下代码是如何工作的?
function odd($var){
   return ($var & 1);
}
echo odd(4); /* returns and print 0 */
echo odd(5); /* returns and print 1 */

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


1
http://php.net/manual/en/language.operators.bitwise.php - Umair Khan
在此处解释了所有这些位运算的内容。 - viral
谢谢您提供的链接。 - partho
3个回答

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  

4

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

如果我们取4个位,4的二进制表示是:0100。5的二进制表示是0101。当我们使用 &(与)进行比较时,它返回同时设置的位。

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

0

它将除0以外的所有位屏蔽。 & 是and运算符。而1在二进制中表示为000000000001。因此其名称与其功能相符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接