بولی/منطقی (C Booleans)
بولی در C: منطقِ صفر و یک 🌓⚖️
در استانداردهایِ اولیهیِ C (قبل از C99)، نوعِ دادهیِ مستقلی به نام Boolean وجود نداشت. C از اعداد برایِ نشان دادنِ منطق استفاده میکند.
تعریفِ سنتی:
- ۰ (Zero): یعنی False (نادرست).
- هر عددی غیر از ۰: یعنی True (درست).
روشِ مدرن: stdbool.h
در C مدرن، با اضافه کردنِ کتابخانهیِ stdbool.h، میتوانید از کلماتِ bool, true و false استفاده کنید.
عملگرهایِ مقایسهای:
این عملگرها خروجیِ بولی تولید میکنند:
==(برابری)،!=(نامساوی)>,<,>=,<=
= (انتساب) و == (مقایسه) باشید. نوشتنِ if (x = 5) همیشه درست ارزیابی میشود چون مقدارِ ۵ غیر از صفر است!
&&(AND): فقط اگر هر دو درست باشند.||(OR): اگر حداقل یکی درست باشد.!(NOT): معکوس کردنِ نتیجه.
بدونِ stdbool:
{code_block('int isSunny = 1;\nif (isSunny) { printf("Weather is good!"); }')}بخش تخصصی: مهندسیِ متغیرها و مدیریتِ حافظه 🧱⚙️⚡
در زبانِ C، متغیرها فقط نامهایی برایِ سادهسازی نیستند؛ آنها نمایندهیِ آدرسهایی در حافظهیِ فیزیکی (RAM) هستند. درکِ نحوهیِ ذخیرهسازیِ دادهها، مرز بینِ یک کدنویسِ معمولی و یک توسعهدهنده سیستم است.
۱. ترتیبِ بایتها (Endianness)
وقتی یک عددِ ۴ بایتی (مثل int) در حافظه ذخیره میشود، بایتها به چه ترتیبی قرار میگیرند؟
- Little-Endian: بایتِ کمارزش در آدرسِ کمتر ذخیره میشود (رایج در پردازندههای x86 و ARM).
- Big-Endian: بایتِ پُرارزش در آدرسِ کمتر ذخیره میشود (رایج در شبکهها و برخی پردازندههای قدیمی).
۲. نمایشِ اعدادِ اعشاری (IEEE 754)
اعدادِ اعشاری در C (مثل float و double) بر اساسِ استانداردِ IEEE 754 ذخیره میشوند. این استاندارد عدد را به سه بخش تقسیم میکند:
- Sign (علامت): ۱ بیت برای مثبت یا منفی بودن.
- Exponent (توان): برای مشخص کردنِ بزرگیِ عدد.
- Mantissa (مانتیس): برای مشخص کردنِ دقتِ عدد.
۳. کلاسهایِ ذخیرهسازی (Storage Classes)
هر متغیر در C علاوه بر "نوع"، یک "کلاسِ ذخیرهسازی" هم دارد که طولِ عمر و حوزهیِ دسترسیِ آن را مشخص میکند:
auto: پیشفرض برای متغیرهای محلی.statice: مقدارِ خود را بینِ فراخوانیهایِ تابع حفظ میکند.extern: برای دسترسی به متغیری که در فایلِ دیگری تعریف شده است.register: به کامپایلر پیشنهاد میدهد متغیر را در ثباتهایِ CPU نگه دارد (برایِ سرعتِ فوقالعاده).
sizeof() برای پیدا کردنِ اندازهیِ واقعیِ یک متغیر در سیستمِ خود استفاده کنید. اندازهیِ int در یک سیستمِ ۱۶ بیتی با یک سیستمِ ۶۴ بیتی میتواند متفاوت باشد!
تمرینهای عملی
برای تثبیت یادگیری این درس تمرینهای زیر را حل کنید
برنامهای بنویسید که نتیجهی مقایسهیِ 10 > 5 را چاپ کند. (خروجی باید 1 باشد)
#include <stdio.h>
int main() {
printf("%d", 10 > 5);
return 0;
}
آماده رفتن به درس بعدی هستید؟
این درس را به پایان رساندید و میتوانید به درس بعدی بروید.