======عملگرها و عبارات======
زبان ++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
برای مطالعهی بیشتر به صفحهی [[http://fa.wikipedia.org/wiki/%D8%B9%D9%85%D9%84%DB%8C%D8%A7%D8%AA_%D8%A8%DB%8C%D8%AA%DB%8C|عملیات بیتی]] در ویکیپدیا مراجعه کنید.
=====عملگر تبدیل نوع=====
با این عملگر میتوان نوع یک مقدار را تبدیل به نوعی دیگر کرد.
این عملگر با نوشتن نوع مقصد در یک جفت پرانتز و نوشتن مقدار مبدا پس از آن، استفاده میشود.
به مثال زیر توجه کنید.
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
پیشنهاد میشود تبدیلهای مقادیر مختلف را با نوشتن قطعه کدهایی به شکل بالا آزمایش کنید و به صورت تجربی یاد بگیرید.