0

有人可以解释一下为什么

echo "0123" | "3456";

返回 3577 以及为什么在 ruby​​ 中

0123 | 3456

将返回 3539

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

但是在 JS

"0123" | "3456" 

将返回 3539

编辑:ELI5 :)

4

3 回答 3

3

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

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

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

于 2013-09-30T08:21:55.723 回答
1

请注意,PHP 片段对字符串进行操作,而 ruby​​ 片段对数字进行操作。另请注意,在红宝石中,数字 0123 是八进制的,因为初始值为 0。

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

要查看 ruby​​ 如何计算结果,您必须首先将第二个操作数转换为以 8 为底或二进制:它是 6600,以 8 为底,按位或的结果是 6723,以 8 为底,或 3539 以十进制。

于 2013-09-30T08:26:59.363 回答
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 值进行操作!

于 2013-09-30T08:41:21.253 回答