PHP 中的二进制操作问题


Issue with binary operation in PHP

decbin()十进制转换为二进制,也是 1 异或 0 = 1

所以, decbin(

0) ^ decbin(1) 应该给我 1 但它什么也没给我....为什么?

但是,如果我在做其他操作,结果是正确的...

  1. 十进制(0) | 十进制(1) => 1

  2. decbin(0) & decbin(1) => 0

  3. decbin(1) & decbin(1) => 1

Decbin 返回一个字符串,并且没有在字符串上定义按位运算符。

编辑问题后,将我的评论编辑为答案:

未定义意味着它们在字符串上没有有意义的功能,而不是它不会给出看似正确的答案。尝试其他一些值,我很确定它不起作用。你要做的是对整数进行操作,一旦你完成了所有的计算,就会得到带有decbin的字符串表示。请参阅二进制文字表示的另一个答案。

在 PHP 5.4+ 中,您可以通过 0b 前缀获得二进制语法:

$res = 0b00 ^ 0b01

您的编辑:结果是偶然正确的。您给出的值将前后转换为字符串,然后再次转换为数字。尝试使用更大的数字,它将失败。按位运算符不会在字符串上失败(因为它们应该失败),因为它们被隐式转换为数字。

您始终可以对普通整数执行操作,然后仅以二进制显示输出:

$res = 1 ^ 0;
echo decbin($res);

这也适用于:

$res = 15 ^ 7;
echo decbin($res);