有谁能解释这个功能?

时间:2017-08-22 12:41:51

标签: php bitwise-operators

这是一个简单的程序,可以找出整数是4的幂,但是当我们取整数255&时,我无法理解这一部分。 256:

 $x = $n;
              while ($x % 4 == 0) {
              $x /= 4;
             }

            if($x == 1)

有人可以向我解释一下吗?

<?php
    function is_Power_of_four($n)
    {
          $x = $n;
          while ($x % 4 == 0) {
          $x /= 4;
         }

        if($x == 1)
        {
            return "$n is power of 4";
        }
        else
        {
            return "$n is not power of 4";
        }

    }
    print_r(is_Power_of_four(4)."\n");
    print_r(is_Power_of_four(255)."\n");
    print_r(is_Power_of_four(256)."\n");
  ?>

1 个答案:

答案 0 :(得分:1)

它是C语言等老语言的惯用语。

大于1且2的幂的x将具有二进制表示1 0 ...,其中...是任意数量的零。

一个小于2的幂的数字(例如x - 1)将具有二进制表示1 ...,其中...是任意数量的1。此外,它将比x少一个二进制数字。同样显而易见的是,从2的幂减去一个翻转该原始数字中的所有位:没有其他数字具有此属性。

&是按位AND运算符。参考http://php.net/manual/en/language.operators.bitwise.php

因此x & (x - 1)当且仅当x的精确幂为2时才为0。