دوره‌ها / آموزش برنامه‌نویسی C / بولی/منطقی (C Booleans)

بولی/منطقی (C Booleans)

20 دقیقه Article

بولی در C: منطقِ صفر و یک 🌓⚖️

در استانداردهایِ اولیه‌یِ C (قبل از C99)، نوعِ داده‌یِ مستقلی به نام Boolean وجود نداشت. C از اعداد برایِ نشان دادنِ منطق استفاده می‌کند.

تعریفِ سنتی:

  • ۰ (Zero): یعنی False (نادرست).
  • هر عددی غیر از ۰: یعنی True (درست).

روشِ مدرن: stdbool.h

در C مدرن، با اضافه کردنِ کتابخانه‌یِ stdbool.h، می‌توانید از کلماتِ bool, true و false استفاده کنید.

{code_block('#include <stdbool.h>\nbool isFinished = true;')}

عملگرهایِ مقایسه‌ای:

این عملگرها خروجیِ بولی تولید می‌کنند:

  • == (برابری)، != (نامساوی)
  • >, <, >=, <=
تله‌یِ بزرگ: مراقبِ فرقِ بینِ = (انتساب) و == (مقایسه) باشید. نوشتنِ if (x = 5) همیشه درست ارزیابی می‌شود چون مقدارِ ۵ غیر از صفر است!
جدولِ درستی (Logical Operators):
  • && (AND): فقط اگر هر دو درست باشند.
  • || (OR): اگر حداقل یکی درست باشد.
  • ! (NOT): معکوس کردنِ نتیجه.

بدونِ stdbool:

{code_block('int isSunny = 1;\nif (isSunny) { printf("Weather is good!"); }')}
<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 در یک سیستمِ ۱۶ بیتی با یک سیستمِ ۶۴ بیتی می‌تواند متفاوت باشد!

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

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

مقایسه اعداد Easy
سوال تمرین

برنامه‌ای بنویسید که نتیجه‌ی مقایسه‌یِ 10 > 5 را چاپ کند. (خروجی باید 1 باشد)

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

int main() {
  printf("%d", 10 > 5);
  return 0;
}

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

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