2009-09-28 8 views
0

Voici le code:entier non signé de PHP sur 32 bits et 64 bits plate-forme

echo sprintf('%u',-123); 

Et ceci est la sortie sur 32 plate-forme de bits:

4294967173 

mais sur 64 bits:

18446744073709551493 

Comment faire pareil? Say, l'int (10) non signé

+0

Dépend de la sortie que vous voulez réellement *. Je pourrais faire la même chose en faisant 'echo" foo "' sur les deux. –

Répondre

3
echo sprintf('-%u',abs(-123)); 

ou

$n = -123; 
echo sprintf("%s%u", $n < 0 ? "-":"", abs($n)); 

Bien que si vous voulez vraiment voir les deux valeurs non signée du complément d'un nombre négatif limité à 32 bits le faire:

echo sprintf("%u", $n & 0xffffffff); 

Et imprimera 4294967173 sur tous les systèmes .

0

Consultez ma réponse à this question pour quelques idées - en un mot, vous pouvez vérifier la valeur de la constante PHP_INT_SIZE pour effectuer un traitement différent sur une plate-forme 64 bits.

Questions connexes