Целое число без знака PHP на 32-битной и 64-битной платформе
Вопрос
Вот код:
echo sprintf('%u',-123);
А это результат на 32-битной платформе:
4294967173
но на 64 битной версии:
18446744073709551493
Как сделать так же? Скажем, int(10) без знака
Решение
echo sprintf('-%u',abs(-123));
или
$n = -123;
echo sprintf("%s%u", $n < 0 ? "-":"", abs($n));
Хотя, если вы действительно хотите увидеть дополнение к двум беззнаковым значениям отрицательного числа, ограниченного 32 битами, просто сделайте:
echo sprintf("%u", $n & 0xffffffff);
И это будет напечатано 4294967173
на всех системах.
Другие советы
Посмотрите мой ответ на этот вопрос для некоторых идей - короче говоря, вы можете проверить значение константы PHP_INT_SIZE для выполнения различной обработки на 64-битной платформе.
Не связан с StackOverflow