C#.NET:
public int NextRandom(int n) {
int n2 = (n + 7) * 3;
n = ((int)((uint)n >> 8) | n << 24);
n ^= ((int)((uint)n >> 7) & 0x3FF) * ((int)((uint)n >> 22) & 0x3FF) + 5 * (n2 + 3);
return n;
}
NextRandom(1337);
C#返回:956321482
PHP:
public function NextRandom($n) {
$n2 = ($n + 7) * 3;
$n = ((int)(abs($n) >> 8) | $n << 24);
$n ^= ((int)(abs($n) >> 7) & 0x3FF) * ((int)(abs($n) >> 22) &
0x3FF) + 5 * ($n2 + 3);
return $n;
}
NextRandom(1337);
PHP返回:22431157962
我的PHP代码有什么问题? 坦克寻求帮助。
已解决: 我添加
$n &= 0xFFFFFFFF;
将整数恢复为32位范围。
答案 0 :(得分:3)
您的操作结果为 22431157962 PHP显示的值
但是int(32bit)可以显示的最大值为 2147483647 ,因此它不能适应您定义的返回类型(int),请尝试将返回类型更改为long(64位)数字)(如果需要,可以使用+其他任何转换),您应该没问题,不是PHP的高手,但我认为PHP在这种情况下使用的是64位数字
有关更多调试信息,调试方法是查看HEX值
956321482 = 0x39004ECA
22431157962 = 0x539004ECA
如果您仔细观察,则前32位相同,但您的数字需要更多