0

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

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

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

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

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

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

4

2 回答 2

4

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

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

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

于 2013-11-05T07:20:28.560 回答
2

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

$res = 0b00 ^ 0b01

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

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

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

这也有效:

$res = 15 ^ 7;
echo decbin($res);
于 2013-11-05T07:25:07.503 回答