我了解按位运算符&
和|
对二进制数如何工作。但是,我对它们如何使用八进制数字感到困惑。
系统是否先将数字转换为二进制,然后执行操作,然后转换回八进制?还是可变的?
例如,如果我执行以下任一操作:
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是否将其保留为八进制?或将其转换为十进制(何时执行?)。
请朝正确的方向指导我学习和学习理解八进制(以及十进制和其他)的按位运算。
答案 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位,并且其他“数字”都不能覆盖这些“保留”的数字。
按位运算在值的位上运行(因此,具有名称)。值的表示/显示与按位运算无关。