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));
    }