عدد صحيح PHP غير الميزي على منصة 32 بت و 64 بت
سؤال
هنا هو الرمز:
echo sprintf('%u',-123);
وهذا هو الإخراج على منصة 32 بت:
4294967173
ولكن على 64 بت:
18446744073709551493
كيف تجعلها هي نفسها؟ قل، الدولي (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