فهرست مندرجات

عملگر‌ها و عبارات

زبان ++C مجموعه‌ای از عملگر‌ها را در اختیار ما می‌گذارد. همچنین رفتار هر عملگر وقتی که روی عملوند‌ها اعمال می‌شوند، تعریف شده است.

یک عبارت متشکل از یک یا چند عملوند است. ساده ترین عبارت می‌تواند یک متغیر باشد و یا یک مقدار ثابت. حاصل چنین عبارتی برای با مقدار متغیر یا مقدار ثابت می‌باشد. عبارات پیچیده‌تر را می‌توان به کمک عملگر‌ها و تعدادی عملوند ساخت، مانند: b * b - 4 * a * c.

عملگر تخصیص

این عملگر برای تخصیص حاصل یک عبارت به یک خانه از حافظه می‌باشد.

در سمت چپ عملگر مساوی که به آن LHS یا Left-Hand Side گفته می‌شود باید یک خانه از حافظه را مشخص کرد. به طور معمول LHS نام یک متغیر می‌باشد. RHS نیز باید یک عبارت باشد.

پس از اجرای دستور مقدار عبارت RHS در حافظه‌ی LHS ذخیره می‌شود.

int a, b, c;
 
a = 3;
b = 4;
 
c = a * a;
c = c + b * b;

در مثال بالا اگر a و b طول دو ضلع قائم یک مثلث قائم الزاویه باشند، در c طول وتر آن مثلث را حساب کرده‌‌ایم.

حاصل عملگر = برابر با RHS می‌باشد. این عملگر وقتی به صورت متوالی استفاده شود، از راست به چپ محاسبه می‌شود.

int x, y, z;
 
x = y = z = 5; // این عبارت معادل است با x = (y = (z = 5)))

عملگر‌های حسابی

پنج عملگر حسابی در ++C تعریف شده‌اند.

عملگر توضیح
+ جمع
- تفریق
* ضرب
/ تقسیم
% باقی‌مانده‌ی تقسیم

عملگر‌های جمع و تفریق و ضرب و تقسیم همانند تعریف ریاضی‌شان عمل می‌کنند.

عملگر % نیز باقی‌مانده‌ی تقسیم LHS بر RHS را محاسبه می‌کند. برای مثال حاصل 11 % 3 برابر با 2 می‌باشد.

تخصیص مرکب

بعضی اوقات می‌خواهیم مقدار متغیر را ۵ واحد اضافه کنیم. می‌توانیم با نوشتن عبارت a = a + 5 این کار را انجام دهیم. اما برای کاهش احتمال اشتباه می‌توان از عملگر‌های تخصیص مرکب استفاده کرد. برای مثال می‌توان به جای عبارت a = a + 5 از عبارت a += 5 استفاده کرد. از نگاهی دیگر، عبارت اخیر خلاصه شده‌ی عبارت اولیه است.

عبارت خلاصه شده‌ی
y += x;
y = y + x;
x -= 5;
x = x - 5;
x /= y;
 x = x / y;
price *= units + 1;
price = price * (units+1);

کاهش و افزایش

بعضی از عبارات را می‌توان خلاصه‌تر نوشت. عملگر کاهش () و عملگر افزایش (++) مقدار یک متغیر را یک واحد کاهش یا افرایش می‌دهند. این عملگر‌ها به ترتیب معادل 1=- و 1=+ هستند.

به دو مثال زیر توجه کنید:

x = 3;
y = x++;
// x is 4 and y is 3
x = 3;
y = ++x;
// x is 4 and y is 4

در دو مثال بالا مقدار نهایی y متفاوت است. در صورتی که عملگر کاهش یا افزایش بعد از متغیر بیاید، حاصل عبارت برابر با مقدار اولیه‌ی متغیر می‌شود، ولی در صورتی که این عملگر‌ها قبل از متغیر استفاده شوند، حاصل عبارت برابر با مقدار تغییر کرده‌ی متغیر می‌شود.

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

عملگر‌های مقایسه در صورت برقراری رابطه‌ای بین LHS و RHS مقدار true و در غیر این صورت مقدار false را بر می‌گردانند.

عملگر توضیح
LHS == RHS
اگر LHS با RHS برابر باشد
LHS != RHS
اگر LHS با RHS فرق کند
LHS < RHS
اگر LHS کوچکتر از RHS باشد
LHS > RHS
اگر LHS بزرگتر از RHS باشد
LHS <= RHS
اگر LHS کوچکتر از یا مساوی با RHS باشد
LHS >= RHS
اگر LHS بزرگتر یا مساوی با RHS باشد

به مثال زیر توجه کنید.

bool a = 1 == 2;
// a is false
 
bool b = a == false;
// b is true
 
bool c = a < b;
// c is true
 
bool d = 4 - 1 <= 3;
// d is true
 
bool e = 3 * 4 == 2 * 6;
// e is true
 
bool f = 2 + 3 * 5 == (2 + 3) * 5;
// f is false

توجه کنید که حاصل عملگر‌های مقایسه از نوع bool می‌باشد.

عملگر‌های منطقی

سه عملگر منطقی زیر برای ترکیب شرط‌ها و نوشتن عبارات شرطی پیچیده‌تر وجود دارند.

عملگر توضیح
LHS && RHS
اگر LHS و RHS هر دو true باشند
LHS || RHS
اگر دست کم یکی از LHS و RHS مقدارش true باشد
!RHS
مقدار نقیض RHS (این عملگر یک ورودی دارد)

به مثال زیر توجه کنید.

bool a = 2 < 3;
// a is true
 
bool b = 2 > 3;
// b is true
 
bool c = a && b;
// c is false
 
bool d = a || b;
// d is true
 
bool e = !c;
// e is true
 
bool f = e && d;
// f is true

عملگر‌ شرطی

این عملگر از سه بخش تشکیل شده است.

condition ? result1 : result2 

بخش اول یک عبارت شرطی condition است که اگر درست باشد، حاصل عبارت برابر با result1 می‌شود و در غیر این صورت حاصل عبارت برابر با result2 می‌شود.

به مثال زیر توجه کنید.

int x = 5;
 
bool odd = x % 2 != 0? true: false;
// odd is true
 
bool even = x % 2 == 0? true: false;
// even is false
 
int sign = x < 0? -1: x > 0? 1: 0;
// sign is 1
 
int a = 4;
int b = 3;
 
int minimum = a < b? a: b;
// minimum is 3

می‌توان عملگر شرطی را به صورت زنجیره‌ای از چند شرط به کار برد.

عملگر‌های بیتی

عملگر‌های بیتی بر حسب الگوی بیت‌های نشان دهنده‌ی ورودی‌هایشان، خروجی‌ای با بیت‌های تغییر یافته تولید می‌کنند.

با مثال زیر و رجوع به بهش عملگر‌های منطقی می‌توانید کارکرد دقیق این عملگر‌ها حدس بزنید.

int a = 60;            //  60 = 0011 1100  
int b = 13;            //  13 = 0000 1101
int c = 0;           
 
c = a & b;             //  12 = 0000 1100
 
c = a | b;             //  61 = 0011 1101
 
c = a ^ b;             //  49 = 0011 0001
 
c = ~a;                // -61 = 1100 0011
 
c = a << 2;            // 240 = 1111 0000
 
c = a >> 2;            //  15 = 0000 1111

برای مطالعه‌ی بیشتر به صفحه‌ی عملیات بیتی در ویکی‌پدیا مراجعه کنید.

عملگر‌ تبدیل نوع

با این عملگر می‌توان نوع یک مقدار را تبدیل به نوعی دیگر کرد. این عملگر با نوشتن نوع مقصد در یک جفت پرانتز و نوشتن مقدار مبدا پس از آن، استفاده می‌شود.

به مثال زیر توجه کنید.

int i;
double d = 3.14;
i = (int) f;
// i is 3
 
int a1 = 0;
bool b1 = (bool) a1;
// b1 is false
 
int a2 = -5;
bool b2 = (bool) a2;
// b2 is true

پیشنهاد می‌شود تبدیل‌های مقادیر مختلف را با نوشتن قطعه کد‌هایی به شکل بالا آزمایش کنید و به صورت تجربی یاد بگیرید.