العلاقة بين طول الكلمة وحجم الحرف وحجم العدد الصحيح والبايت
سؤال
ما هي العلاقة بين طول الكلمة وحجم الحرف وحجم العدد الصحيح والبايت في C++؟
المحلول
وهذا المعيار يتطلب أن أنواعا معينة لها <م> الحد الأدنى م> أحجام (باختصار هو لا يقل عن 16 بت، الباحث هو 16 بت على الأقل، الخ)، وأن بعض الجماعات من نوع تنظم (sizeof(int)
> = sizeof(short)
> = sizeof(char)
).
نصائح أخرى
في C++، يجب أن يكون الحرف كبيرًا بما يكفي لاستيعاب أي حرف في مجموعة الأحرف الأساسية للتنفيذ.
int
له "الحجم الطبيعي الذي تقترحه بنية بيئة التنفيذ".لاحظ أن هذا يعني أن int يفعل ذلك لا يجب أن يكون حجمها 32 بت على الأقل.التنفيذ حيث int
16 بت شائعة (فكر في MS-DOS المضمن).
ما يلي مأخوذ من أجزاء مختلفة من معايير C++ 98 وC99:
long int
يجب أن يكون على الأقل بحجمint
int
يجب أن يكون على الأقل بحجمshort
short
يجب أن يكون على الأقل بحجمchar
لاحظ أنه يمكن أن تكون جميعها بنفس الحجم.
أيضًا (بافتراض التنفيذ المكمل لاثنين):
long int
يجب أن يكون على الأقل 32 بتint
يجب أن يكون على الأقل 16 بتshort
يجب أن يكون على الأقل 16 بتchar
يجب أن يكون على الأقل 8 بت
وهذا المعيار لا يعرف هذا "كلمة" ثينغي تستخدم من قبل المعالجات. لكنه يقول نوع "الباحث" يجب أن يكون حجم الطبيعي للبيئة التنفيذ. ولكن حتى 64 البيئات بعض الشيء، وكثافة العمليات عادة ما يكون 32 بت فقط. حتى "كلمة" من حيث القياسية لديها الكثير جدا لا معنى مشترك (باستثناء اللغة الإنجليزية "كلمة" المشتركة طبعا).
وحجم الحرف هو حجم الحرف. يعتمد على ما الحرف الذي نتحدث عنه. أنواع الحرف وشار، تشار غير موقعة وشار وقعت. أيضا wchar_t يستخدم لتخزين الأحرف التي يمكن أن يكون لها أي حجم (يحدده تنفيذ - ولكن يجب استخدام أحد أنواع صحيح كنوع الكامنة مثل الكثير من التعدادات.)، في حين شار / شار وقعت أو الحرف غير الموقعة لا بد أن يكون بايت واحد. وهذا يعني أن بايت واحد لديه بت بقدر ما شار واحد لديه. إذا قال التنفيذ كائن واحد من نوع شار له 16 بت، ثم بايت على 16 بت أيضا.
والآن بايت هو الحجم الذي شار واحد يشغل. انها وحدة، وليس بعض نوع معين. ليس هناك أكثر من ذلك بكثير عن ذلك، أن مجرد أنها الوحدة التي يمكنك الوصول إلى الذاكرة. أي بمعنى لم يكن لديك وصول المؤشر إلى حقول قليلا، ولكن لديك حق الوصول إلى وحدات تبدأ من بايت واحد.
و"حجم عدد صحيح" الآن على نطاق واسع جدا. ماذا تقصد بذلك؟ كل من منطقي، شار، وباختصار، كثافة، طويلة ونظرائهم unsinged أعداد صحيحة. مداها هو ما يمكن أن أسميه "حجم صحيحا" كما تم توثيقه في مستوى C - الاستيلاء عليها من قبل ++ C القياسية. لوقعت شار مجموعة هو من -127 <-> 127، لفترة قصيرة، وكثافة العمليات هو نفسه وغير -2 ^ 15 + 1 <-> 2 ^ 15-1 ولفترة طويلة فمن -2 ^ 31 + 1 < -> 2 ^ 31-1. وتتراوح نظرائهم غير موقعة من 0 إلى 2 ^ 8-1، 2 ^ 16-1 و 2 ^ 32-1 على التوالي. تلك هي إلا الحد الأدنى من الأحجام. وهذا هو، عدد صحيح قد لا يكون أكبر حجم 2 ^ 14 على أي منصة، لأن ذلك هو أقل من 2 ^ 15-1 بطبيعة الحال. ويترتب عن تلك القيم التي لا بد من الحد الأدنى من البتات. لشار هو 8، قصيرة / كثافة العمليات التي هي 16 و لفترة طويلة وهذا هو 32. Two's-تكملة تمثيل للأرقام السالبة غير مطلوب، وهذا هو السبب في قيمة سالبة لا -128
بدلا من -127
على سبيل المثال لشار وقعت.
وستاندرد C ++ نوع بيانات تسمى word
أو byte
. يتم تعريف باقي كذلك نطاقات. القاعدة هي char
التي لديها البتات CHAR_BITS
. القيمة الأكثر شيوعا من CHAR_BITS هي 8.
وsizeof (شار) == 1 (بايت واحد) (في ج ++، C في - غير محددة)
sizeof (دولي)> = sizeof (شار)
كلمة - لا ج ++ نوع، غن في هندسة الكمبيوتر يعني 2 بايت
ونوع يعتمد على ما تعنيه العلاقة. حجم أنواع الرقمية عموما متعددة من حجم الكلمة الجهاز. بايت هو بايت بايت - 8 بت، لا أكثر ولا أقل. يتم تعريف حرف في معيار كما بايت غير موقعة واحد أعتقد (راجع ARM للحصول على التفاصيل).
والقاعدة العامة هي، لا تجعل أي افتراضات حول الحجم الفعلي للأنواع البيانات. يحدد المعيار والعلاقات بين أنواع مثل عدد صحيح "طويل" أن تكون إما نفس الحجم أو أكبر من مجرد "كثافة". سوف تطبيقات الفردية للغة اختيار أحجام محددة لأنواع التي هي مريحة بالنسبة لهم. على سبيل المثال، سوف مترجم لمعالج 64 بت اختيار أحجام مختلفة من مترجم لمعالج 32 بت.
ويمكنك استخدام عامل التشغيل sizeof () لفحص أحجام محددة للمترجم الذي تستخدمه (على بنية مستهدفة محددة).