English  

كتب أنواع البيانات في سي

اذا لم تجد ما تبحث عنه يمكنك استخدام كلمات أكثر دقة.

عرض المزيد

أنواع البيانات في سي (معلومة)


أنواع البيانات في لغة سي تكون أنواع البيانات عبارة عن إعلانات لعنواين الذاكرة، أو المتغيرات، التي تحدد خصائص البيانات التي يمكن تخزينها وأساليب (العمليات) للمعالجة المسموح بها.

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

أنواع البيانات

توفر لغة السي أربعة أنواع أساسية من أنواع البيانات char الخاص برمز واحد و int الخاص بالأرقام الصحيحة و float الخاص بالأرقام العشرية و double الخاص بالأرقام العشرية الكبيرة، ومعدلات موقعة signed وغير موقعة unsigned وقصيرة (short) وطويلة (long) . يسرد الجدول التالي المجموعات المسموح بها لتحديد مجموعة كبيرة من الإعلانات الخاصة بحجم التخزين.

يختلف الحجم الفعلي لأنواع الأعداد الصحيحة باختلاف التنفيذ. يتطلب المعيار فقط علاقات حجم بين أنواع البيانات والحد الأدنى من الأحجام لكل نوع من البيانات:

متطلبات العلاقة هي أن "طويلة طويلة" long long ليست أصغر من "طويلة" long ، وهي ليست أصغر من "الأعداد الصحيحة" int ، وهي ليست أصغر من "قصيرة" short . نظرًا لأن حجم char "الرمز" هو دومًا الحد الأدنى من نوع البيانات المدعومة، فلا يمكن أن تكون أي أنواع بيانات أخرى (باستثناء حقول البتات) أصغر.

الحد الأدنى لحجم char هو 8 بت، الحد الأدنى لحجم short والint هو 16 بت، "long" هو 32 بت و "long long" يجب أن تحتوي على 64 بت على الأقل.

يجب أن يكون النوع int هو النوع الصحيح الذي يعمل به المعالج بشكل أكثر كفاءة. يتيح ذلك مرونة كبيرة: على سبيل المثال، يمكن أن تكون جميع الأنواع 64 بت. ومع ذلك، هناك العديد من أنظمة عرض عدد صحيح مختلفة (طرازات البيانات) شائعة. لأن نموذج البيانات يحدد كيفية توصيل البرامج المختلفة، يتم استخدام نموذج بيانات موحد داخل واجهة تطبيق نظام التشغيل.

عملياً، char عادةً ثمانية بت في الحجم و short عادةً 16 بت في الحجم (كما هي نظائرها غير الموقعة). ينطبق هذا على المنصات المتنوعة مثل التسعينات SunOS 4 Unix و Microsoft MS-DOS و Linux الحديثة و Microchip MCC18 للميكروكونترولر 8 بت. و POSIX يتطلب char أن يكون حجمها ثمانية بتات.

إن القواعد المختلفة في المعيار C تجعل "char" غير الموقّع هو النوع الأساسي المستخدم في المصفوفات المناسبة لتخزين الأشياء "non-bit-field" التعسفية: افتقارها إلى بتات الحشو وتوضيحات المصائد، وتعريف تمثيل الكائن إمكانية التعرج.

يختلف الحجم الفعلي وسلوك أنواع "floating-point" أيضًا حسب التطبيق. الضمان الوحيد هو أن "long double" ليس أصغر من "double" ، وهو ليس أصغر من "float". عادة، يتم استخدام تنسيقات النقطة العائمة الثنائية 32 بت و 64 بت IEEE 754 ، إذا كانت مدعومة من قبل الأجهزة.

يتضمن معيار C99 أنواع float_t و double_t حقيقية جديدة "floating-point" ، ويتم تعريفها في البداية في العنوان<math.h> . وهي تتوافق مع الأنواع المستخدمة للنتائج الوسيطة للتعبيرات ذات النقطة العائمة عندما تكون FLT_EVAL_METHOD هي 0 أو 1 أو 2. وقد تكون هذه الأنواع أوسع من مزدوجة طويلة.

وأضاف C99 أيضا أنواع معقدة: float _Complex، double _Complex، long double _Complex.

نوع القيم المنطقية (Boolean)

أضاف الC99 نوع Bool وهو عبارة عن ال ( صحيح / خطأ ) boolean . بالإضافة إلى ذلك، يعرّف العنوان الجديد <stdbool.h> ال Bool كاسم مستعار مناسب لهذا النوع كما يوفر وحدات الماكرو لـ true و false. وظائف ال Bool مماثلة لنوع متكامل عادي، مع استثناء واحد: يتم تخزين أي بيان إلى _Bool التي ليست 0 (خطأ) ك 1 (صحيح). يوجد هذا السلوك لتجنب طفح عدد صحيح (integer overflows) في تضييق التحويلات الضمنية. على سبيل المثال، في التعليمة البرمجية (code) التالية:

unsigned char b = 256; if (b) { /* do something */ }

قيمة الb ستساوي صفر/خطأ (false) في حالة أن يكونunsigned char في نطاق ال8بت .. ويرجع السبب في ذلك إلى عدم احتواء نوع البيان ال 256 ، مما يؤدي إلى استخدام 8 بتات أقل منه، مما ينتج عنه قيمة صفرية. ومع ذلك، يؤدي تغيير نوع التعليمات البرمجية (code) السابقة إلى التصرف بشكل طبيعي

_Bool b = 256; if (b) { /* do something */ }

حجم ومؤشر الانواع المختلفة

مواصفات لغة الC بالأضافة الي typedefs ( كلمة تستخدم لتكون اسم مستعار لنوع بيان جديد ) size_t وptrdiff_t لتمثيل الكميات المتعلقة بالذاكرة. يتم تعريف حجمها وفقا للقدرات الحسابية لمعالج الهدف لا قدرات الذاكرة، مثل مساحة العنوان المتوفرة. كل من هذه الأنواع محددة في العنوان <stddef.h> ( في السي++ cstddef ) .

size_t هو نوع صحيح غير موقعة يستخدم لتمثيل حجم أي كائن (بما في ذلك المصفوفات) في تنفيذ معين . sizeof المشغل ينتج قيمة من نوع size_t . الحجم الأكبر لsize_t بنتج من خلال SIZE_MAX

ثابت المايكرو الذي تم تعريفه في العنوان <stdint.h> .

size_t يضمن أن يكون على الأقل على نطاق 16 بايت . بالأضافة POSIX يحتوي ssize_t، وهو نوع متكامل موقّع بنفس عرضه ك size_t.

ptrdiff_t نوع متكامل موقَّع يُستخدم لتمثيل الفرق بين المؤشرات . فقط يضمن أن تكون صالحة ضد المؤشرات التي من نفس النوع . مسح المؤشرات التي تتكون من أنواع مختلفة هو تعريف التنفيذ.

واجهة خصائص الأنواع الاساسية

يتم توفير معلومات حول الخصائص الفعلية، مثل الحجم، من الأنواع الحسابية الأساسية، عبر الثوابت الكلية في رأسين : <limits.h> المسؤل عن تعريف الmacros للأرقام الصحيحة و <float.h> المسؤل عن تعريف الmacros لأنواع floating-point . القيم الحقيقية تعتمد علي التنفيذ الحقيقي.

خصائص نوع الرقم الصحيح (int)

    مذكور سابقا أن نوع البيان يمكن أن يكون مميزا أكثر بالType qualifiers . هناك أربعة أنواع مؤهلات في C11 القياسية: const C89 ، متقلبة C89 ، وتقييد C99 و _Atomic C11 . هذا الأخير لديه اسم خاص لتجنب تعارض مع أسماء المستخدمين. ولكن الatomic يمكن أن فقط يستخدم في حالة وجود العنوان <stdatomic.h> مسبقا . const الي حد بعيد هو أشهرهم وأكثرهم استخداما. تظهر في المكتبة القياسية وتوجد في أي استخدام كبير للغة C ، والتي يجب أن تلبي const-correctness ( صحة الconst ). تستخدم المؤهلات الأخرى للبرمجة ذات المستوى المنخفض، وعلى الرغم من استخدامها على نطاق واسع، إلا أنه نادرًا ما يستخدمها المبرمجون العاديون.

    المصدر: wikipedia.org