"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > هل "الفترة الطويلة" مضمونة بالحصول على 32 بت على الأقل في لغة C++؟

هل "الفترة الطويلة" مضمونة بالحصول على 32 بت على الأقل في لغة C++؟

تم النشر بتاريخ 2024-11-07
تصفح:970

Is `long` Guaranteed to Have at Least 32 Bits in C  ?

هل ضمان الحصول على 32 بت لفترة طويلة؟

على الرغم من الافتراضات الشائعة المستندة إلى معيار C، فإن السؤال الذي يطرح نفسه هو ما إذا كان ضمان الحصول على فترة طويلة مضمونًا 32 بت على الأقل. يصنف المعيار الأنواع الأساسية للتكامل على النحو التالي:

sizeof(char) ≤ sizeof(short int) ≤ sizeof(int) ≤ sizeof(long int)

ومع ذلك، يفترض الكثيرون أنه بناءً على هذا التسلسل الهرمي، يجب أن يكون طويل 32 بت. ومع ذلك، ينص المعيار صراحة على أن عدد البتات في البايت يتم تحديده من خلال التنفيذ.

مطالبة ألف ب. أكد شتاينباخ أن المدة الطويلة مضمونة لتكون 32 بت. لقد استند في هذا الادعاء إلى الحد الضمني لنطاق القيم التي يمكن أن يحتفظ بها المدى الطويل (LONG_MIN إلى LONG_MAX).

يشير معيار C إلى معيار C (18.3.2)، الذي يحدد:

LONG_MIN ≥ -2^31 1 LONG_MAX ≥ 2^31 - 1

LONG_MIN ≤ -2^31   1
LONG_MAX ≥ 2^31 - 1

على الرغم من أن هذا ينشئ نطاقًا لفترة طويلة، إلا أنه لا يضمن صراحةً 32 بت. ومع ذلك، هناك احتمالان:

التمثيل الثنائي المكمل:
  1. إذا تم تمثيل الأرقام السالبة في المكمل الثنائي، فإن تخزين LONG_MIN أو LONG_MAX يتطلب 32 بت.
    بت الإشارة الصريحة:
  2. إذا تم استخدام بت الإشارة للأرقام السالبة، فإن إجمالي التخزين لا يزال يتطلب 32 بت.
  3. الاستنتاج

على الرغم من أن معيار C لا يتطلب صراحةً أن يكون طوله 32 بت، إلا أن الحد الأدنى لمتطلبات النطاق (LONG_MIN إلى LONG_MAX) يستلزم ذلك ضمنيًا. وذلك لأن تمثيل هذه القيم يتطلب إما 32 بت من التخزين أو آلية خاصة بالتنفيذ بسعة قيمة مكافئة. لذلك، يمكن أن نستنتج أن لغة C تضمن أن تحتوي على 32 بت على الأقل.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3