C#.NET to PHP same code with different result

2

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# RETURN: 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 RETURN: 22431157962

What is wrong in my PHP code? Tanks for help.

SOLVED: I add

$n &= 0xFFFFFFFF;

to put the integer back into 32-bit range.

c#
php
asked on Stack Overflow Nov 26, 2018 by C0debreaker • edited Nov 26, 2018 by C0debreaker

1 Answer

3

the result of your operation is 22431157962 the value that PHP shows

But the max value an int(32bit) can show is 2147483647, so it can not fit in the return type(int) you have defined, try changing the return type to long(64 bit number) (+any other cast if needed) and you should be fine, not a master at PHP but i think PHP is using 64 bit number in this case

Just for more debug info, the way to debug this is look at HEX values
956321482 = 0x39004ECA
22431157962 = 0x539004ECA

If you look close the first 32bit are same, but your number needs more than that

answered on Stack Overflow Nov 26, 2018 by hessam hedieh

User contributions licensed under CC BY-SA 3.0