دوره‌ها / آموزش برنامه‌نویسی C / انواع داده (C Data Types)

انواع داده (C Data Types)

20 دقیقه Article

انواعِ داده در C: طبقه‌بندیِ دقیقِ اطلاعات 📋🧬

C یک زبانِ Statically Typed است، یعنی نوعِ داده‌یِ هر متغیر باید در زمانِ کامپایل مشخص باشد. انتخابِ صحیحِ نوعِ داده باعثِ بهینه‌سازیِ مصرفِ رم می‌شود.

انواعِ داده‌یِ پایه (Basic Types):

<th style="padding: 10px; border: 1px solid rgba(255,255,255,0.1);">نوع</th> <th style="padding: 10px; border: 1px solid rgba(255,255,255,0.1);">اندازه (بایت)</th> <th style="padding: 10px; border: 1px solid rgba(255,255,255,0.1);">توضیح</th>
int 2 or 4 اعداد صحیح
float 4 اعداد اعشاری (دقتِ ۷ رقم)
double 8 اعداد اعشاری (دقتِ ۱۵ رقم)
char 1 تک کاراکتر / کد ASCII

اصلاح‌کننده‌ها (Type Modifiers):

با استفاده از کلماتِ کلیدی می‌توانید رفتارِ نوعِ داده را تغییر دهید:

  • signed / unsigned: برایِ تعیینِ داشتنِ علامت (مثبت و منفی) یا فقط مثبت بودن.
  • short / long: برایِ تغییرِ محدوده‌یِ اعداد.
تفاوتِ float و double: همیشه از double برایِ محاسباتِ حساسِ مهندسی استفاده کنید، چون دقتِ آن دو برابرِ float است. float فقط زمانی خوب است که محدودیت‌هایِ شدیدِ حافظه دارید (مثل میکروکنترلرها).
اندازه‌یِ دقیق: برایِ چاپِ اندازه‌یِ یک نوعِ داده در سیستم خودتان، از کدِ زیر استفاده کنید: {code_block('printf("%lu", sizeof(int));')}
<hr style="margin: 50px 0; border: 0; border-top: 1px dashed rgba(255,255,255,0.1);">

بخش تخصصی: مهندسیِ متغیرها و مدیریتِ حافظه 🧱⚙️⚡

در زبانِ C، متغیرها فقط نام‌هایی برایِ ساده‌سازی نیستند؛ آن‌ها نماینده‌یِ آدرس‌هایی در حافظه‌یِ فیزیکی (RAM) هستند. درکِ نحوه‌یِ ذخیره‌سازیِ داده‌ها، مرز بینِ یک کدنویسِ معمولی و یک توسعه‌دهنده سیستم است.

۱. ترتیبِ بایت‌ها (Endianness)

وقتی یک عددِ ۴ بایتی (مثل int) در حافظه ذخیره می‌شود، بایت‌ها به چه ترتیبی قرار می‌گیرند؟

  • Little-Endian: بایتِ کم‌ارزش در آدرسِ کمتر ذخیره می‌شود (رایج در پردازنده‌های x86 و ARM).
  • Big-Endian: بایتِ پُرارزش در آدرسِ کمتر ذخیره می‌شود (رایج در شبکه‌ها و برخی پردازنده‌های قدیمی).

۲. نمایشِ اعدادِ اعشاری (IEEE 754)

اعدادِ اعشاری در C (مثل float و double) بر اساسِ استانداردِ IEEE 754 ذخیره می‌شوند. این استاندارد عدد را به سه بخش تقسیم می‌کند:

  1. Sign (علامت): ۱ بیت برای مثبت یا منفی بودن.
  2. Exponent (توان): برای مشخص کردنِ بزرگیِ عدد.
  3. Mantissa (مانتیس): برای مشخص کردنِ دقتِ عدد.

۳. کلاس‌هایِ ذخیره‌سازی (Storage Classes)

هر متغیر در C علاوه بر "نوع"، یک "کلاسِ ذخیره‌سازی" هم دارد که طولِ عمر و حوزه‌یِ دسترسیِ آن را مشخص می‌کند:

  • auto: پیش‌فرض برای متغیرهای محلی.
  • statice: مقدارِ خود را بینِ فراخوانی‌هایِ تابع حفظ می‌کند.
  • extern: برای دسترسی به متغیری که در فایلِ دیگری تعریف شده است.
  • register: به کامپایلر پیشنهاد می‌دهد متغیر را در ثبات‌هایِ CPU نگه دارد (برایِ سرعتِ فوق‌العاده).
نکته مهندسی: همیشه از sizeof() برای پیدا کردنِ اندازه‌یِ واقعیِ یک متغیر در سیستمِ خود استفاده کنید. اندازه‌یِ int در یک سیستمِ ۱۶ بیتی با یک سیستمِ ۶۴ بیتی می‌تواند متفاوت باشد!

تمرین‌های عملی

برای تثبیت یادگیری این درس تمرین‌های زیر را حل کنید

اندازه متغیر char Easy
سوال تمرین

خروجیِ تابع sizeof(char) را با استفاده از printf چاپ کنید.

پاسخ تمرین
C
#include <stdio.h>

int main() {
  printf("%lu", sizeof(char));
  return 0;
}

آماده رفتن به درس بعدی هستید؟

این درس را به پایان رساندید و می‌توانید به درس بعدی بروید.