Конвертировать с 64-битного номера на 32-битный номер

Пытается много и просто терпит неудачу ..

$x = 76561198005785475; 

Я хочу это число, превратись в это:

 $y = 45519747; 

Это 32-битная форма.


Попытка объяснить более подробно:

http://www.tonymarston.net/php-mysql/converter.php

    1) Поместите значение 76561198005785475 в поле «Десятичный (ввод)». 2) Нажмите «DEC to BIN» в поле «Binary (Base 2)». 3) Счет 32, начиная с ПРАВО и скопируйте его. 4) Вставьте двоичное число 32 символов в поле «Binary (Base 2)». 5) Нажмите кнопку «Bin to Dec» в поле «Binary (Base 2)».

    Итак, теперь вы можете увидеть номер «45519747».

    Related of "Конвертировать с 64-битного номера на 32-битный номер"

    Попробуй это:

     $y = $x & 0xffffffff; 

    Это приведет к усечению вашего 64-битного значения в 32-битное значение, но обратите внимание, что нет абсолютно никакого способа вернуть 64-битное значение, это деструктивный метод.

    Это слишком долго, чтобы писать комментарий, поэтому я отправлю его здесь.

    @Kolink имеет правильный ответ; то, что вы хотите, это операция. Однако обратите внимание, что, поскольку ваш $x слишком велик, чтобы быть сохраненным в формате int любом случае, он будет удерживаться как float в 32-разрядных компьютерах, а float s будет страдать от потери точности. Моя теория о том, почему вы получаете 45519744 вместо правильного ответа, заключается в том, что ваш 32-разрядный компьютер потерял точность на последних цифрах. Чтобы увидеть это в действии, попробуйте здесь :

     $x = 76561198005785475; echo (int)$x; 

    Этот сайт использует 32-битный сервер, и он возвращает 45519744. Это демонстрирует потерю точности.

    С другой стороны, если вы пойдете сюда и запустите:

     $x = 76561198005785475; $y = $x & 0xffffff; 

    Вы получаете правильный ответ, потому что этот сайт 64-битный.

    Если вы хотите выполнить операцию на 32-битной машине (как вы, очевидно, делаете), я предлагаю вам использовать gmp_and из расширения PHP GMP. К сожалению, я не мог проверить, работает ли это – я оставлю это вам.

    Я попробовал много решений. Но никто мне не помогает. Наконец, следующий сценарий спасет мою жизнь.

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