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

توفر لغة السي أربعة أنواع أساسية من أنواع البيانات char الخاص برمز واحد و int الخاص بالأرقام الصحيحة و float الخاص بالأرقام العشرية و double الخاص بالأرقام العشرية الكبيرة، ومعدلات موقعة signed وغير موقعة unsigned وقصيرة (short) وطويلة (long). يسرد الجدول التالي المجموعات المسموح بها لتحديد مجموعة كبيرة من الإعلانات الخاصة بحجم التخزين.
| النوع | التوضيح |  |
| --- | --- | --- |
| char | أصغر وحدة يمكن معالجتها في الجهاز التي يمكن أن تحتوي على مجموعة أحرف أساسية. إنه نوع رقم صحيح (integer). يمكن أن يكون النوع الفعلي إما موقّعًا signed أو غير موقّع unsigned. يحتوي على عدد بايتس من CHAR_BIT | %c |
| signed char | يستهلك نفس حجم الchar ولكن يضمن أن نوع البيان يكون موقعا signed. يحتوي على [−127، +127] مدي على الأقل  | %c (or %hhi for numerical output) |
| unsigned char | يستهلك نفس حجم الchar. ولكن ضمن أن نوع البيان يكون غير موقعا unsigned.يحتوي على [0، 255] مدي على الأقل | %c (or %hhu for numerical output) |
| short short int signed short signed short int | نوع صحيح قصير موقّع. قادرة على احتواء نطاق [،32,767، + 32,767] على الأقل، ولكن حجمها 16 بت على الأقل. القيمة السالبة هي −32767 (ليس 732768) بسبب التمثيلات الخاصة بالمكمل والتوقيع، التي يسمح بها المعيار، على الرغم من أن متمم ثنائي مكمل أكثر شيوعًا. | %hi |
| unsigned short unsigned short int | نوع صحيح قصير غير موقعة (unsigned int). قادر علي احتواء النطاق [0، 65535] على الأقل | %hu |
| int signed signed int | نوع صحيح موقّع أساسي (signed int). قادر على احتواء النطاق [32,767، + 32,767] على الأقل؛ ولكن، حجمها 16 بت على الأقل. | %i or %d |
| unsigned unsigned int | نوع صحيح أساسي غير موقعة (unsigned int) يحتوي على الأقل على النطاق [0، 65535]. | %u |
| long long int signed long signed long int | نوع صحيح طويل موقّع. قادرة على احتواء النطاق [−2,147,483,647] [−2,147,483,647] على الأقل، وحجمها 32 بت على الأقل. | %li |
| unsigned long unsigned long int | نوع صحيح طويل غير موقعة. قادر على احتواء النطاق [0: 4,294,967,295] على الأقل. | %lu |
| long long long long int signed long long signed long long int | عدد صحيح طويل موقع. قادر على أن يحتوي على الأقل [9,223,372,036,854,775,807، +9,223,372,036,854,775,807] المدى؛ وبالتالي، لا يقل حجمها عن 64 بت. محدد منذ إصدار C99. | %lli |
| unsigned long long unsigned long long int | نوع صحيح غير موقعة. يحتوي على الأقل [0، +18,446,744,073,709,551,615] نطاق؛ معين منذ C99. | %llu |
| float | نوع ال floating-point الحقيقي. وعادة ما يشار اليه كfloating-point أحادي الدقة. الخصائص الفعلية غير محددة. ولكن في معظم الأنظمة يكون IEEE 754هو شكل الfloating-point ثنائي الدقة (32 بت).هذا الشكل يكون مطلوب في ملحق Annex F "IEC 60559 في حساب floating-point. | for formatted input: %f %F for digital notation، or  %g %G، or %e %E %a %A for كتابة علمية |
| double | نوع ال floating-point الحقيقي. وعادة ما يشار اليه كfloating-point ثنائي الدقة. الخصائص الفعلية غير محددة. ولكن في معظم الأنظمة يكون IEEE 754هو شكل الfloating-point ثنائي الدقة (64 بت).هذا الشكل يكون مطلوب في ملحق Annex F "IEC 60559 في حساب floating-point. | %lf %lF %lg %lG %le %lE %la %lA; for formatted output، the length modifier l is optional. |
| long double | نوع الfloating-point يتم تعيينه عادةً إلى تنسيق floating-point الدقة ممتدة. الخصائص الفعلية غير محددة. يمكن ان يكون اما تنسيق floating-point بدقة x86 موسعة (80بت) ولكن عادة مايكون (96 بت) او (128 بت) في في الذاكرة مع واحدات البايت. وشكل IEEE754 floating-point نقطة (128 بت) او " long double ". | %Lf %LF %Lg %LG %Le %LE %La %LA |
يختلف الحجم الفعلي لأنواع الأعداد الصحيحة باختلاف التنفيذ. يتطلب المعيار فقط علاقات حجم بين أنواع البيانات والحد الأدنى من الأحجام لكل نوع من البيانات:
متطلبات العلاقة هي أن «طويلة طويلة» 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.