32ビットintオーバーフロー正数へ
425 ワード
32ビットシステムプラットフォーム(例えばwindows)ではintは32ビットであり、オーバーフロー後に返されるのは負数である.この負数を64ビットプラットフォームの下で
/**
* uid 32 , php 64 ,
* @param int $num
* @return int
*/
function uid32FixNegative($num)
{
if(PHP_INT_SIZE == 4 || !is_int($num) || $num >= 0) {
return $num;
}
$bin = decbin($num);
return bindec(substr($bin, -32));
}