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