عدد صحيح PHP غير الميزي على منصة 32 بت و 64 بت

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

  •  18-09-2019
  •  | 
  •  

سؤال

هنا هو الرمز:

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 بت.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top