将一些代码从 javascript 重写为 php
function level(k, d) {
return (k << d) | (k >>> (32 - d))
}
发生了
function level($k, $d) {
return ($k << $d) | abs($k >> (32 - $d));
}
但问题是,在级别 (14,8) javascript 和 php 返回相同的 3584。在更大的 byaka 级别 (10000,30) 上:
10737418240000 | 2500 //js 2500
10737418240000 | 2500 //php 10737418242500
你在哪里犯错了?
沙盒http://sandbox.onlinephpfunctions.com/code/aed1b6d153c7c21518c317664a0a1b4d24dd2070
问题是 javascript 中的按位运算符仅适用于 32 位数字。
所有操作数和结果最终都以 32 位数给出。
例如,在左移的情况下,实数将是
10737418240000
,如果我们将其转换为二进制形式,我们会得到以下结果:如何用 0 替换最后 32 个字符,当减少为 32 位数字时会给出 0。
所以
10000 << 30
==0
接下来是按位或 c 2500,由于原始数字中的所有内容都是 0,因此我们得到 2500。
php.ini 中没有这样的限制。