为什么这个PHP代码会从这个C#代码中产生不同的值?

PHP CODE:

$var1 = (int)395390486;
$var1 <<= 10 & 0xFF;
print($var1);  //outputs 404879857664

C# CODE:

int var1 = 395390486;
var1 <<= 10 & 0xFF;
Debug.WriteLine(var1); //outputs 1152931840

why its doing this ?

Ok I am able to get the same value in PHP by converting to 32 bit with the following function:

function intval32bits($value) {
 $value = ($value & 0xFFFFFFFF);
 if ($value & 0x80000000)
 $value = -((~$value & 0xFFFFFFFF) + 1);
 return $value;
}