Целое число без знака PHP на 32-битной и 64-битной платформе

StackOverflow https://stackoverflow.com/questions/1486827

  •  18-09-2019
  •  | 
  •  

Вопрос

Вот код:

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-битной платформе.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top