دوره‌ها / آموزش برنامه‌نویسی C++ / C++ Operators

C++ Operators

30 دقیقه Article

عملگرها: موتورِ محرکِ محاسبات ⚙️⚡

عملگرها (Operators) نمادهایی هستند که روی متغیرها و مقادیر عملیات انجام می‌دهند. بدونِ آن‌ها، برنامه فقط مجموعه‌ای از داده‌هایِ ساکن است.

۱. عملگرهایِ ریاضی (Arithmetic)

شاملِ +, -, *, / و عملگرِ باقیمانده % (Modulus) هستند.

۲. افزایش و کاهش (Increment/Decrement)

  • ++x: مقدار را یک واحد زیاد می‌کند (پیش‌افزایش).
  • x--: مقدار را یک واحد کم می‌کند (پس‌کاهش).

۳. عملگرهایِ انتسابِ ترکیبی (Compound Assignment):

به جایِ نوشتنِ x = x + 5، می‌توانید بنویسید: x += 5. این روش کد را تمیزتر و کوتاه‌تر می‌کند.

تقسیمِ صحیح: اگر دو عددِ int را بر هم تقسیم کنید (مثلاً 5/2)، نتیجه 2 می‌شود نه 2.5! چون اعشار در نوعِ صحیح ذخیره نمی‌شود. برایِ نتیجه‌یِ دقیق، حداقل یکی از اعداد باید float یا double باشد.
باقیمانده (%): عملگرِ % فقط روی اعدادِ صحیح کار می‌کند و باقیمانده‌یِ تقسیم را برمی‌گرداند. کاربردِ اصلیِ آن تشخیصِ زوج یا فرد بودن یا یافتنِ مضرب‌ها است.

اولویتِ عملگرها (Precedence):

درست مثل ریاضیات، ضرب و تقسیم زودتر از جمع و تفریق انجام می‌شوند. برایِ تغییرِ اولویت، از پرانتز () استفاده کنید.

<hr style="margin: 50px 0; border: 0; border-top: 1px dashed rgba(255,255,255,0.1);">

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

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

۱. مقداردهیِ سراسری (Universal Initialization)

از استاندارد C++11 به بعد، روشِ جدیدی برای مقداردهی معرفی شد که از آکولاد {} استفاده می‌کند. این روش دو مزیت بزرگ دارد: اول اینکه از Narrowing Conversion جلوگیری می‌کند (مثلاً نمی‌گذارد یک double را در int بریزید و داده گم شود)؛ و دوم اینکه مشکلِ "Most Vexing Parse" را حل می‌کند که باعث می‌شد کامپایلر فکر کند شما در حالِ اعلانِ یک تابع هستید نه متغیر.

۲. معماریِ شئ String (SSO)

در C++، کلاسِ std::string بسیار هوشمند است. اکثرِ پیاده‌سازی‌هایِ مدرن از تکنیکی به نام Small String Optimization استفاده می‌کنند. اگر رشته‌یِ شما کوتاه باشد (مثلاً کمتر از ۱۵ یا ۲۳ کاراکتر)، آن را مستقیماً داخلِ خودِ شئ (روی Stack) ذخیره می‌کند تا از فراخوانیِ سنگینِ سیستم‌عامل برایِ دریافتِ حافظه از Heap جلوگیری شود. این یعنی سرعتِ فوق‌العاده در پردازشِ متن‌هایِ کوتاه.

۳. دقتِ محاسباتِ اعشاری (IEEE 754)

دنیایِ کامپیوتر باینری است و نمی‌تواند تمامِ اعدادِ اعشاریِ دهدهی را با دقتِ ۱۰۰٪ ذخیره کند. مثلاً عدد 0.1 در باینری یک عددِ متناوب است. به همین دلیل در سیستم‌های مالیِ حساس، هرگز نباید از float یا double برایِ مبالغِ دقیق استفاده کرد؛ مهندسان در این مواقع از متغیرهایِ صحیح (Integer) بر حسبِ "کوچکترین واحد" (مثل ریال یا سنت) استفاده می‌کنند.

نکته مهندسی: استفاده از کلمه‌یِ کلیدی auto به جایِ نوعِ داده، به کامپایلر اجازه می‌دهد خودش نوعِ متغیر را حدس بزند. این کار در کدهایِ پیچیده باعث می‌شود کدِ شما در برابرِ تغییراتِ آینده (Refactoring) مقاوم‌تر باشد.

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

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

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

باقیمانده‌یِ تقسیمِ عددِ 15 بر 4 را محاسبه و چاپ کنید.

پاسخ تمرین
CPP
#include <iostream>
using namespace std;

int main() {
  cout << 15 % 4;
  return 0;
}

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

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