زبان ++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
پیشنهاد میشود تبدیلهای مقادیر مختلف را با نوشتن قطعه کدهایی به شکل بالا آزمایش کنید و به صورت تجربی یاد بگیرید.