PHP 操作符

按位或运算符 (|) 是一个二元运算符,它采用两个长度相等的位模式并对每对相应位执行逻辑或运算。如果同一位置的一个或两个位为 1,则返回 1,否则返回 0。

Bit_1Bit_2Bit_1 | Bit_2
000
101
011
111

下面的示例描述了按位 OR 运算符的工作原理:

50 | 25 returns 59

     50    ->    110010  (In Binary)
   | 25    ->  | 011001  (In Binary)
    ----        --------
     59    <-    111011  (In Binary) 
  • 1
  • 2
  • 3
  • 4
  • 5

使用按位或运算符(|)的代码如下:

<?php
$x = 50;
$y = 25;
$z;

//按位或运算
$z = $x | $y;

//显示结果
echo "z = $z";
?> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

上述代码的输出将是:

z = 59 

    示例:求小于或等于给定数字的最大2的幂

    考虑一个整数1000。在按位格式中,它可以写为1111101000。但是,这里没有写出所有位。完整的表示将是 32 位表示,如下所示:

    00000000000000000000001111101000 

      执行 N = N | (N>>i) 操作,其中 i = 1, 2, 4, 8, 16 会将所有右侧位更改为 1。当应用于 1000 时,结果为32 位表示如下:

      00000000000000000000001111111111 

        将此结果加一,然后将结果右移一位,将得到小于或等于 1000 的最大 2 次方。

        00000000000000000000001000000000 

          下面的代码将计算小于或等于给定数字的 2 的最大幂。

          <?php
          function MaxPowerOfTwo($N) {
            //将所有右侧位更改为1。
            $N = $N | ($N>>1);
            $N = $N | ($N>>2);
            $N = $N | ($N>>4);
            $N = $N | ($N>>8);
            $N = $N | ($N>>16);
            
            //$N 加 1 得到最小幂
            //大于给定数字的 2 个
            $N = $N + 1;
          
            //右移一位使得
            //小于或的2的最大幂
            //等于给定数字
            $N = $N >> 1; 
            return $N;
          }
          
          echo "MaxPowerOfTwo(100) = ".
              MaxPowerOfTwo(100)."\n";
          echo "MaxPowerOfTwo(500) = ".
              MaxPowerOfTwo(500)."\n";
          echo "MaxPowerOfTwo(1000) = ".
              MaxPowerOfTwo(1000)."\n";      
          ?> 
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11
          • 12
          • 13
          • 14
          • 15
          • 16
          • 17
          • 18
          • 19
          • 20
          • 21
          • 22
          • 23
          • 24
          • 25
          • 26

          上面的代码将给出以下输出:

          MaxPowerOfTwo(100) = 64
          MaxPowerOfTwo(500) = 256
          MaxPowerOfTwo(1000) = 512 
          • 1
          • 2