【问题标题】:How bitwise operator works [duplicate]按位运算符的工作原理[重复]
【发布时间】:2015-08-04 01:29:15
【问题描述】:

我不明白以下代码是如何工作的?

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

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

【问题讨论】:

标签: php bitwise-operators


【解决方案1】:

二进制中的奇数的最低有效位 (LSB) 始终为 1。这就是您的代码的原因

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

对奇数返回真。以下是您问题中的示例:

(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  

【讨论】:

    【解决方案2】:

    它会屏蔽除 0 以外的所有位。& 是 and 运算符。而1 是二进制的000000000001。所以它就像它的名字一样工作。

    【讨论】:

      【解决方案3】:

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

      如果我们取 4 位,则 4 的位表示为:0100。5 的位表示为 0101。当我们将其与 &(and) 进行比较时,它会返回同时设置的位。

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

      【讨论】:

        猜你喜欢
        • 2019-07-04
        • 1970-01-01
        • 1970-01-01
        • 2011-04-18
        • 2013-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多