Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 有人能解释这个功能吗?_Php_Bitwise Operators - Fatal编程技术网

Php 有人能解释这个功能吗?

Php 有人能解释这个功能吗?,php,bitwise-operators,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;

这是一个简单的程序,可以确定一个整数是否是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");
  ?>

在C等较老的语言中,它是惯用的

大于1(二的幂)的数字
x
将具有二进制表示形式
10…
,其中
是任意数量的零

小于二次幂的一个数(
x-1
)将具有二进制表示形式
1…
,其中
是任意一个数。此外,它将比
x
少一个二进制数字。同样明显的是,从2的幂中减去1会翻转原始数字中的所有位:没有其他数字具有此属性

&
是按位AND运算符。参考文献


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

查找。对我来说,副本太窄了。这个问题更多的是关于按位AND运算符的一个特殊用法。我知道按位运算符,但它用于查找整数是否是2的幂,可以从第3行更具体一些吗?我不明白“一比二的幂(比如x-1)小的一个数会有……例如,取16,即0b10000。15是0b1111。0b10000&0b1111是0。