C#.NET到PHP的相同代码具有不同的结果

时间:2018-11-26 20:54:30

标签: c# php

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位范围。

1 个答案:

答案 0 :(得分:3)

您的操作结果为 22431157962 PHP显示的值

但是int(32bit)可以显示的最大值为 2147483647 ,因此它不能适应您定义的返回类型(int),请尝试将返回类型更改为long(64位)数字)(如果需要,可以使用+其他任何转换),您应该没问题,不是PHP的高手,但我认为PHP在这种情况下使用的是64位数字

有关更多调试信息,调试方法是查看HEX值
956321482 = 0x39004ECA
22431157962 = 0x539004ECA

如果您仔细观察,则前32位相同,但您的数字需要更多