PHP的OR二进制逻辑

时间:2013-09-30 08:18:11

标签: php ruby logic

有人可以解释一下为什么

echo "0123" | "3456";

返回3577以及红宝石中的原因

0123 | 3456

将返回3539

编辑:这是一个不好的例子,因为ruby的版本不是字符串。

但在JS中

"0123" | "3456" 

将返回3539

编辑:ELI5:)

3 个答案:

答案 0 :(得分:3)

你的答案很简单:字符串和整数不一样:

var_dump("0123" | "3456");//string(4) "3577"
var_dump(0123 | 3456); //int(3539) 

还要注意 oct integers的0 **表示法。

答案 1 :(得分:1)

请注意,PHP片段在字符串上运行,而ruby片段在数字上运行。另请注意,在ruby中,由于初始值为0,因此数字0123为八进制。

在PHP中,按位或在字符串之间按位或在每个字符之间计算,因此结果将首先为0 | 3,即3,然后是1 | 4,即5,然后是2 | 5,这是7,然后3 | 6,即7.注意操作是用字符计算的,所以例如2 | 9会给你;

要查看如何通过ruby计算结果,您必须先将第二个操作数转换为基数8或二进制:它在基数8中为6600,并且按位的结果或因此在基数8中为6723,或者在十进制中为3539

答案 2 :(得分:0)

PHP有时很奇怪:

echo 0123 | 3456; //0123 is interpret as an octal number

返回3539

echo 123 | 3456;

返回3579

echo (int)"0123" | (int)"3456";

返回3579

echo "0123" | "3456";  

返回3577

如果左侧和右侧参数都是字符串,则按位运算符将对字符的ASCII值进行操作!!