有人可以解释一下为什么
echo "0123" | "3456";
返回3577以及红宝石中的原因
0123 | 3456
将返回3539
编辑:这是一个不好的例子,因为ruby的版本不是字符串。
但在JS中
"0123" | "3456"
将返回3539
编辑:ELI5:)
答案 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值进行操作!!