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