整形处理变更

1. 无效的八进制字面量将产生编译错误.

比如, 以下表达式不再合法:

$i = 0781; // 8 is not a valid octal digit!

之前不合法的数字(与后继的所有合法数字)会被简单的忽略. $i 之前值是7, 因为后两位数字会被静默丢弃.

2. 位移负数现在会抛ArithmeticError.
var_dump(1 >> -1);
// ArithmeticError: Bit shift by negative number
3. 左移超过整形位数总是返回0.
var_dump(1 << 64); // int(0)

之前以上代码的行为取决于CPU架构. 例如, x86(包括x86-64)架构下返回int(1), 因为位移操作会回绕.

4. 类似的, 右移超过整形位数总是返回0或者-1(取决于正负):
var_dump(1 >> 64);  // int(0)
var_dump(-1 >> 64); // int(-1)

Relevant RFC: integer_semantics

results matching ""

    No results matching ""