按位&|八进制系统中的运算符

时间:2018-12-02 01:54:11

标签: php bitwise-operators

我了解按位运算符&|对二进制数如何工作。但是,我对它们如何使用八进制数字感到困惑。

系统是否先将数字转换为二进制,然后执行操作,然后转换回八进制?还是可变的?

例如,如果我执行以下任一操作:

echo decoct( 0400 & 0500 | 0000 );
echo decoct( 0600 & 0500 | 0000 );

我得到400作为结果。

但是,如果我这样做:

echo decoct( 0400 & 0500 | 0100 );
echo decoct( 0600 & 0500 | 0100 );

两种情况下我都得到500

此外,我已经看到代码在PHP中按位操作而不使用decoct。完成操作后,PHP是否将其保留为八进制?或将其转换为十进制(何时执行?)。

请朝正确的方向指导我学习和学习理解八进制(以及十进制和其他)的按位运算。

1 个答案:

答案 0 :(得分:1)

按位运算符“幸运地”适用于值/变量的二进制,八进制和十六进制表示形式。最后,它们都将在您的值/变量的二进制级别上运行。您的数字/位分组非常适合按位运算符。

  0400 = 0b100000000 = 0x100 (0001 0000 0000)
& 0500 = 0b101000000 = 0x140 (0001 0100 0000)
----------------------------
  0400 = 0b100000000 = 0x100 (0001 0000 0000)
| 0100 = 0b001000000 = 0x040 (0000 0100 0000)
----------------------------
  0500 = 0b101000000 = 0x140 (0001 0100 0000)

对于其他表达式:

  0600 = 0b110000000 = 0x180 (0001 1000 0000)
& 0500 = 0b101000000 = 0x140 (0001 0100 0000)
----------------------------
  0400 = 0b100000000 = 0x100 (0001 0000 0000)
| 0100 = 0b001000000 = 0x040 (0000 0100 0000)
----------------------------
  0500 = 0b101000000 = 0x140 (0001 0100 0000)

它确实适用于这些表示形式,因为一个“数字”将始终使用1、3或4位,并且其他“数字”都不能覆盖这些“保留”的数字。

按位运算在值的位上运行(因此,具有名称)。值的表示/显示与按位运算无关。