decbin()将十进制转换为二进制, 也 1 XOR 0 = 1
所以, decbin(0)^ decbin(1)应该给我 1 ,但它什么都不给我 ....为什么?
但是,如果我正在做其他操作,那么结果是正确的......
decbin(0)| decbin(1)=> 1
decbin(0)& decbin(1)=> 0
decbin(1)& decbin(1)=> 1
答案 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);