عملگرهای حسابی در C#
عملگرهای حسابی (arithmetic operators) برای انجام اعمال محاسباتی روی اعداد به کار میروند. در جدول زیر لیست
این عملگرها را میبینید.
نام عملگر |
نماد عملگر |
مثال |
عملگر جمع (addition) |
+ |
int x = 5 + 7; // x = 12
double y = 5.25 + 8.0; // y = 13.25
|
عملگر تفریق (subtraction) |
- |
int x = 10 - 2; // x = 8
double y = 8.0 - 5.3; // y = 2.7
|
عملگر ضرب (multiplication) |
* |
let x = 5 * 6; // x=30
double y = 5.0 * 8.2; // y = 41.0
|
عملگر تقسیم (division) |
/ |
int x = 10 / 5; // x = 2
double y = 10.0 / 4.0; // y = 2.5
|
عملگر باقیماندهی تقسیم (modulus) |
% |
int x = 30 % 4; // x = 2
double d = 30.0 % 4.5; // y = 3.0
|
عملگر افزاینده (incrementor) |
++ |
int x = 10;
x++; // x = 11
|
عملگر کاهنده (decrementor) |
-- |
int x = 10;
x--; // x = 9
|
وقتی از عملگرهای بالا برای انجام اعمال محاسباتی استفاده میکنید، باید چند نکته را در نظر داشته باشید. با
عملگر جمع یا addition شروع میکنیم.
نماد + وقتی حکم عملگر جمع را دارد که عملوندهایش عدد باشند. اما اگر در عبارت a + b یکی از علموندهای a و b یا
هر دوی آنها string باشند، این نماد حکم عملگر الحاق (concatenation) را پیدا میکند که رشتهها را به هم
میچسباند. به علاوه، اگر a و b هر دو عدد باشند اما نوعهای متفاوتی داشته باشند، عددی که از نوع کوچکتر است،
با یک تبدیل ضمنی به نوع بزرگتر تبدیل میشود.
Program.cs
float f = 2 + 3.5f;
double d = 1.5 + f;
string s = 5 + "Hi";
در گزارهی اول، مقدار 2 از int به float تبدیل شده و در گزارهی دوم، f از float به double تبدیل شده است.
در مورد عملگر تفریق هم نکتهای وجود دارد که باید بدانید. این عملگر، پتانسیل بالایی برای تولید خطای تقریب
دارد. به کد زیر نگاه کنید.
Program.cs
double x = 8.7 - 4.2;
double y = 8.7 - 4.3;
double z = 8.7 - 4.4;
Console.WriteLine($"x = {x}");
Console.WriteLine($"y = {y}");
Console.WriteLine($"z = {z}");
اگر این کد را اجرا کنید، نتیجهی زیر را مشاهده خواهید کرد.
x = 4.499999999999999
y = 4.3999999999999995
z = 4.299999999999999
علت این امر به نحوهی انجام عمل تفریق در حافظهی کامپیوتر برمیگردد و ربطی به زبان C# یا هیچ زبان دیگری
ندارد. اما به هر حال، باید بدانید که این مسئله برای عمل تفریق وجود دارد تا با نتایج غیر قابل انتظار مواجه
نشوید. همانطور که قبلاً گفتیم، یک راه حل برای کنترل خطای تقریب، استفاده از نوع decimal است و در اولین درس از
فصل بعد که به کار با اعداد اختصاص دارد، روشهای دیگری را نیز معرفی خواهیم کرد.
در مورد عملگرهای ضرب و تقسیم هم این نکته را تکرار میکنم که اگر عملوندها از نوعهای عددی متفاوتی باشند،
عملوندی که از نوع کوچکتر است به طور ضمنی به نوع بزرگتر تبدیل میشود.
در مورد دو عملگر افزاینده و کاهنده که دارای نمادهای ++ و -- هستند، نیز نکتهای وجود دارد که در مثال زیر دیده
میشود.
Program.cs
int x = 8;
Console.WriteLine(x++);
Console.WriteLine(x);
int y = 8;
Console.WriteLine(++y);
Console.WriteLine(y);
int z = 3 + x++;
Console.WriteLine(z); // => 12
این عملگرها را میتوان به دو شکل استفاده کرد. یکی به فرم x++ که باعث میشود ابتدا مقدار متغیر x در محاسبات
شرکت کند و سپس، یک واحد به آن افزوده شود و دیگری به فرم ++x که باعث میشود ابتدا یک واحد به x اضافه شود و
سپس در محاسبات شرکت کند.
عملگر تخصیص
در C# عملگر = عملگر تخصیص (assignment operator) نامیده میشود و برای تخصیص مقادیر به متغیرها به کار میرود.
از ترکیب عملگر تخصیص با عملگرهای حسابی میتوان برای خلاصهنویسی برخی عبارات استفاده کرد. جدول زیر را
ببینید.
عبارت |
معادل |
x += y |
x = x + y |
x -= y |
x = x -y |
x *= y |
x = x * y |
x /= y |
x = x / y |
x %= y |
x = x % y |
عملگرهای مقایسهای
گروه دیگری از عملگرهای C# که برای مقایسهی مقادیر عددی به کار میروند، عملگرهای مقایسهای
(comparisional)
نامیده میشوند. این عملگرها در جدول زیر آورده شدهاند.
نام عملگر |
نماد عملگر |
مثال |
عملگر برابری (equality) |
== |
bool b = 10 == 5; // b=false
bool b = "Hi" == "hi"; // b=false
|
عملگر نابرابری (not equality) |
!= |
bool b = 10 != 5; // b = true
|
عملگر بزرگتری (greater than) |
> |
bool b = 10 > 5; // b=true
|
عملگر کوچکتری (less than) |
< |
bool b = 10 < 5; // b=false
|
عملگر بزرگتر یا مساوی
(greater than or equal to)
|
>= |
bool b = 10 >= 5; // b=true
|
عملگر کوچکتر یا مساوی
(less than or equal to)
|
<= |
bool b = 10 <= 10; // b=true |
اولین مطلبی که باید در مورد عملگرهای مقایسهای بدانید این است که نتیجهی حاصل از یک عمل مقایسهای همیشه یک
bool است. به علاوه، علموندهای این عملگرها باید از نوعهای عددی باشند. اگر نوع عددی عملوندها یکی نباشد، یک
تبدیل ضمنی باعث میشود نوع کوچکتر به بزرگتر تبدیل شود.
عملگرهای برابری ( == ) و نابرابری ( != ) میتوانند عملوندهای bool یا string هم داشته باشند؛ البته به
شرطی که هر دو عملوند از یک نوع باشند.