PHP中的二进制操作问题

时间:2013-11-05 07:17:26

标签: php bitwise-operators

decbin()十进制转换为二进制, 也 1 XOR 0 = 1

所以, decbin(0)^ decbin(1)应该给我 1 ,但它什么都不给我 ....为什么?

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

  1. decbin(0)| decbin(1)=> 1

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

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

2 个答案:

答案 0 :(得分:4)

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

在编辑问题后将我的评论编辑到答案中:

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

答案 1 :(得分:2)

在PHP 5.4+中,您可以通过0b前缀:

获得二进制语法
$res = 0b00 ^ 0b01

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

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

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

这也有效:

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