Frage

Hier ist der Code:

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

Und das ist die Ausgabe auf 32-Bit-Plattform:

4294967173

aber auf 64 Bit:

18446744073709551493

Wie es das gleiche machen? Sag mal, die int (10) unsigned

War es hilfreich?

Lösung

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

oder

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

Obwohl, wenn Sie tatsächlich wollen, dass das Zweierkomplement Wert ohne Vorzeichen einer negativen Zahl sehen, beschränkt auf 32 Bit nur tun:

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

Und das 4294967173 auf allen Systemen gedruckt werden.

Andere Tipps

Schauen Sie sich meine Antwort auf diese Frage href="https://stackoverflow.com/questions/872424/unsigned-int-to-signed-in-php"> für einige Ideen, um

scroll top