در این مقاله، به بررسی انواع مختلف عملگرها در سی شارپ «#Operators in C» و نحوه استفاده از آنها میپردازیم. همچنین، کاربرد هر کدام از این عملگرها را در حل مسائل برنامهنویسی و سادهتر کردن کدها بررسی خواهیم کرد.
مقدمه
عملگرها اساس هر زبان برنامهنویسی به شمار میآیند و در زبان #C نیز نقش حیاتی در انجام انواع عملیات مختلف بر روی دادهها دارند. عملگرها در سی شارپ به دستههای مختلفی تقسیم میشوند که هر کدام عملکرد خاص خود را دارند. این دستهها شامل عملگرهای ریاضی، منطقی، مقایسهای، بیتی، تخصیص و عملگر شرطی هستند که هر یک برای انجام وظایف مختلف در برنامهنویسی استفاده میشوند.
انواع عملگرها در سی شارپ
عملکرد زبان #C بدون استفاده از عملگرها ناقص است. عملگرها به ما این امکان را میدهند که عملیات مختلفی را بر روی عملوندها انجام دهیم. در #C، عملگرها میتوانند بر اساس عملکرد مختلف خود دستهبندی شوند:
- عملگرهای حسابی «Arithmetic Operators»
- عملگرهای رابطهای «Relational Operators»
- عملگرهای منطقی «Logical Operators»
- عملگرهای بیتی «Bitwise Operators»
- عملگرهای انتساب «Assignment Operators»
- عملگر شرطی «Conditional Operator»
همچنین عملگرها در سی شارپ میتوانند بر اساس تعداد عملوندها دستهبندی شوند:
عملگر یکطرفه «Unary Operator»: عملگری که برای انجام عملیات تنها به یک عملوند نیاز دارد.
عملگر باینری «Binary Operator»: عملگری که برای انجام عملیات به دو عملوند نیاز دارد.
عملگر سهتایی «Ternary Operator»: عملگری که برای انجام عملیات به سه عملوند نیاز دارد.
عملگرهای ریاضی در سی شارپ
این عملگرها در سی شارپ برای انجام عملیات حسابی/ریاضی بر روی عملوندها استفاده میشوند. عملگرهای باینری که در این دسته قرار میگیرند عبارتند از:
- جمع «Addition»: عملگر ‘+’ دو عملوند را جمع میکند. به عنوان مثال، x+y.
- تفریق «Subtraction»: عملگر ‘-‘ دو عملوند را از هم کسر میکند. به عنوان مثال، x-y.
- ضرب «Multiplication»: عملگر ‘*’ دو عملوند را ضرب میکند. به عنوان مثال، x*y.
- تقسیم «Division»: عملگر ‘/’ عملوند اول را بر عملوند دوم تقسیم میکند. به عنوان مثال، x/y.
- مقیاس «Modulus»: عملگر ‘%’ باقیمانده زمانی که عملوند اول بر عملوند دوم تقسیم میشود را برمیگرداند. به عنوان مثال، x%y.
// C# program to demonstrate the working // of Binary Arithmetic Operators using System; namespace Arithmetic { class ProgramStore { // Main Function static void Main(string[] args) { int result; int x = 10, y = 5; // Addition result = (x + y); Console.WriteLine("Addition Operator: " + result); // Subtraction result = (x - y); Console.WriteLine("Subtraction Operator: " + result); // Multiplication result = (x * y); Console.WriteLine("Multiplication Operator: "+ result); // Division result = (x / y); Console.WriteLine("Division Operator: " + result); // Modulo result = (x % y); Console.WriteLine("Modulo Operator: " + result); } } }
خروجی
Addition Operator: 15 Subtraction Operator: 5 Multiplication Operator: 50 Division Operator: 2 Modulo Operator: 0
عملگرهایی که در دسته عملگرهای یکطرفه قرار میگیرند عبارتند از:
- افزایش «Increment»: عملگر ‘++’ برای افزایش مقدار یک عدد صحیح استفاده میشود. وقتی قبل از نام متغیر قرار گیرد (که به آن عملگر پیشافزایش گفته میشود)، مقدار آن بلافاصله افزایش مییابد. به عنوان مثال، x++. و زمانی که بعد از نام متغیر قرار گیرد (که به آن عملگر پسافزایش گفته میشود)، مقدار آن به طور موقت حفظ میشود تا اجرای این دستور، و قبل از اجرای دستور بعدی بهروزرسانی میشود. به عنوان مثال،++x.
- کاهش «Decrement»: عملگر ‘–‘ برای کاهش مقدار یک عدد صحیح استفاده میشود. وقتی قبل از نام متغیر قرار گیرد (که به آن عملگر پیشکاهش گفته میشود)، مقدار آن بلافاصله کاهش مییابد. به عنوان مثال، x–. و زمانی که بعد از نام متغیر قرار گیرد (که به آن عملگر پسکاهش گفته میشود)، مقدار آن به طور موقت حفظ میشود تا اجرای این دستور، و قبل از اجرای دستور بعدی بهروزرسانی میشود. به عنوان مثال، –x.
مثال
// C# program to demonstrate the working // of Unary Arithmetic Operators using System; namespace Arithmetic { class ProgramStore { // Main Function static void Main(string[] args) { int a = 10, res; // post-increment example: // res is assigned 10 only, // a is not updated yet res = a++; //a becomes 11 now Console.WriteLine("a is {0} and res is {1}", a, res); // post-decrement example: // res is assigned 11 only, a is not updated yet res = a--; //a becomes 10 now Console.WriteLine("a is {0} and res is {1}", a, res); // pre-increment example: // res is assigned 11 now since a // is updated here itself res = ++a; // a and res have same values = 11 Console.WriteLine("a is {0} and res is {1}", a, res); // pre-decrement example: // res is assigned 10 only since // a is updated here itself res = --a; // a and res have same values = 10 Console.WriteLine("a is {0} and res is {1}",a, res); } } }
خروجی
a is 11 and res is 10 a is 10 and res is 11 a is 11 and res is 11 a is 10 and res is 10
عملگرهای رابطه ای در سی شارپ
این عملگرها در سی شارپ برای مقایسه دو مقدار استفاده میشوند. در ادامه آنها را یکی یکی بررسی میکنیم:
- ‘==’ (مساوی با Equal To) این عملگر بررسی میکند که آیا دو عملوند داده شده برابر هستند یا نه. اگر برابر باشند، مقدار true باز میگرداند. در غیر این صورت، مقدار false باز میگرداند. به عنوان مثال، ۵==۵ مقدار true را باز میگرداند.
- ‘=!’ (مخالف با Not Equal To) این عملگر بررسی میکند که آیا دو عملوند داده شده برابر هستند یا نه. اگر برابر نباشند، مقدار true باز میگرداند. در غیر این صورت، مقدار false باز میگرداند. این عملگر مکمل بولی عملگر ‘==’ است. به عنوان مثال، ۵=!۵ مقدار false را باز میگرداند.
- ‘<’ (بزرگتر از Greater Than) این عملگر بررسی میکند که آیا عملوند اول بزرگتر از عملوند دوم است یا نه. اگر باشد، مقدار true باز میگرداند. در غیر این صورت، مقدار false باز میگرداند. به عنوان مثال، ۵<6 مقدار true را باز میگرداند.
- ‘>’ (کوچکتر از Less Than) این عملگر بررسی میکند که آیا عملوند اول کوچکتر از عملوند دوم است یا نه. اگر باشد، مقدار true باز میگرداند. در غیر این صورت، مقدار false باز میگرداند. به عنوان مثال، ۵>6 مقدار false را باز میگرداند.
- ‘=<’ (بزرگتر یا مساوی با Greater Than Equal To) این عملگر بررسی میکند که آیا عملوند اول بزرگتر یا مساوی با عملوند دوم است یا نه. اگر باشد، مقدار true باز میگرداند. در غیر این صورت، مقدار false باز میگرداند. به عنوان مثال، ۵=<5 مقدار true را باز میگرداند.
- ‘=>’ (کوچکتر یا مساوی با Less Than Equal To) این عملگر بررسی میکند که آیا عملوند اول کوچکتر یا مساوی با عملوند دوم است یا نه. اگر باشد، مقدار true باز میگرداند. در غیر این صورت، مقدار false باز میگرداند. به عنوان مثال، ۵=>5 نیز مقدار true را باز میگرداند.
مثال
// C# program to demonstrate the working // of Relational Operators using System; namespace Relational { class ProgramStore { // Main Function static void Main(string[] args) { bool result; int x = 5, y = 10; // Equal to Operator result = (x == y); Console.WriteLine("Equal to Operator: " + result); // Greater than Operator result = (x > y); Console.WriteLine("Greater than Operator: " + result); // Less than Operator result = (x < y); Console.WriteLine("Less than Operator: " + result); // Greater than Equal to Operator result = (x >= y); Console.WriteLine("Greater than or Equal to: "+ result); // Less than Equal to Operator result = (x <= y); Console.WriteLine("Lesser than or Equal to: "+ result); // Not Equal To Operator result = (x != y); Console.WriteLine("Not Equal to Operator: " + result); } } }
خروجی
Equal to Operator: False Greater than Operator: False Less than Operator: True Greater than or Equal to: False Lesser than or Equal to: True Not Equal to Operator: True
عملگرهای منطقی در سی شارپ
این عملگرها در سی شارپ برای ترکیب دو یا بیشتر شرایط/محدودیتها یا برای مکمل کردن ارزیابی شرط اصلی مورد بررسی استفاده میشوند. آنها به شرح زیر هستند:
- عملگر AND منطقی «Logical AND»: عملگر ‘&&’ زمانی مقدار true را باز میگرداند که هر دو شرط مورد نظر برآورده شوند. در غیر این صورت، مقدار false باز میگرداند. به عنوان مثال، a && b زمانی مقدار true را باز میگرداند که هم a و هم b برابر با true باشند (یعنی غیر صفر).
- عملگر OR منطقی «Logical OR»: عملگر ‘||’ زمانی مقدار true را باز میگرداند که یکی از شرایط (یا هر دو) مورد نظر برآورده شوند. در غیر این صورت، مقدار false باز میگرداند. به عنوان مثال، a || b زمانی مقدار true را باز میگرداند اگر یکی از a یا b برابر با true باشد (یعنی غیر صفر). البته، وقتی هر دو a و b برابر با true باشند نیز مقدار true باز میگرداند.
- عملگر NOT منطقی «Logical NOT»: عملگر ‘!’ زمانی مقدار true را باز میگرداند که شرط مورد نظر برآورده نشود. در غیر این صورت، مقدار false باز میگرداند. به عنوان مثال، a! زمانی مقدار true را باز میگرداند که a برابر با false باشد، یعنی زمانی که a=0.
// C# program to demonstrate the working // of Logical Operators using System; namespace Logical { class ProgramStore { // Main Function static void Main(string[] args) { bool a = true,b = false, result; // AND operator result = a && b; Console.WriteLine("AND Operator: " + result); // OR operator result = a || b; Console.WriteLine("OR Operator: " + result); // NOT operator result = !a; Console.WriteLine("NOT Operator: " + result); } } }
خروجی
AND Operator: False OR Operator: True NOT Operator: False
عملگرهای بیتی در سی شارپ
در سی شارپ، ۶ عملگر بیتی وجود دارند که در سطح بیت کار میکنند یا برای انجام عملیات بیت به بیت استفاده میشوند. عملگرهای بیتی به شرح زیر هستند:
- & (AND بیتی bitwise AND): دو عدد را به عنوان عملوند میگیرد و عملیات AND را روی هر بیت از دو عدد انجام میدهد. نتیجه AND برابر با ۱ خواهد بود فقط زمانی که هر دو بیت برابر با ۱ باشند.
- | (OR بیتی bitwise OR): دو عدد را به عنوان عملوند میگیرد و عملیات OR را روی هر بیت از دو عدد انجام میدهد. نتیجه OR برابر با ۱ خواهد بود اگر یکی از دو بیت برابر با ۱ باشد.
- ^ (XOR بیتی bitwise XOR): دو عدد را به عنوان عملوند میگیرد و عملیات XOR را روی هر بیت از دو عدد انجام میدهد. نتیجه XOR برابر با ۱ خواهد بود اگر دو بیت متفاوت باشند.
- ~ (مکمل بیتی bitwise Complement): یک عدد را به عنوان عملوند میگیرد و هر بیتی که ۱ باشد را به ۰ و هر بیتی که ۰ باشد را به ۱ تبدیل میکند.
- >> (چپچرخش left shift): دو عدد را میگیرد، بیتهای عملوند اول را به سمت چپ میچرخاند، عملوند دوم تعداد مکانهایی را که باید بیتها به سمت چپ جابجا شوند، تعیین میکند.
- << (راستچرخش right shift): دو عدد را میگیرد، بیتهای عملوند اول را به سمت راست میچرخاند، عملوند دوم تعداد مکانهایی را که باید بیتها به سمت راست جابجا شوند، تعیین میکند.
مثال
// C# program to demonstrate the working // of Bitwise Operators using System; namespace Bitwise { class ProgramStore { // Main Function static void Main(string[] args) { int x = 5, y = 10, result; // Bitwise AND Operator result = x & y; Console.WriteLine("Bitwise AND: " + result); // Bitwise OR Operator result = x | y; Console.WriteLine("Bitwise OR: " + result); // Bitwise XOR Operator result = x ^ y; Console.WriteLine("Bitwise XOR: " + result); // Bitwise Complement Operator result = ~x; Console.WriteLine("Bitwise Complement: " + result); // Bitwise LEFT SHIFT Operator result = x << 2; Console.WriteLine("Bitwise Left Shift: " + result); // Bitwise RIGHT SHIFT Operator result = x >> 2; Console.WriteLine("Bitwise Right Shift: " + result); } } }
خروجی
Bitwise AND: 0 Bitwise OR: 15 Bitwise XOR: 15 Bitwise Complement: -6 Bitwise Left Shift: 20 Bitwise Right Shift: 1
عملگرهای انتساب در سی شارپ
یکی از عملگرها در سی شارپ است که برای انتساب یک مقدار به یک متغیر استفاده میشوند. عملوند سمت چپ عملگر انتساب یک متغیر است و عملوند سمت راست عملگر انتساب یک مقدار است. مقدار در سمت راست باید از همان نوع داده متغیر در سمت چپ باشد وگرنه کامپایلر خطا خواهد داد.
انواع مختلف عملگرهای انتساب به شرح زیر است:
- “=” (انتساب ساده Simple Assignment): این سادهترین عملگر انتساب است. از این عملگر برای انتساب مقدار در سمت راست به متغیر در سمت چپ استفاده میشود.
مثال
a = 10; b = 20; ch = 'y';
- “=+” (انتساب جمع Add Assignment): این عملگر ترکیبی از عملگرهای ‘+’ و ‘=’ است. ابتدا مقدار فعلی متغیر در سمت چپ را به مقدار موجود در سمت راست اضافه میکند و سپس نتیجه را به متغیر در سمت چپ انتساب میدهد.
مثال
(a += b) can be written as (a = a + b)
اگر مقدار اولیه ذخیرهشده در a برابر با ۵ باشد، سپس (a += 6) برابر با ۱۱ خواهد بود.
- “=-” (انتساب تفریق Subtract Assignment): این عملگر ترکیبی از عملگرهای ‘-’ و ‘=’ است. ابتدا مقدار فعلی متغیر در سمت چپ را از مقدار موجود در سمت راست کسر میکند و سپس نتیجه را به متغیر در سمت چپ انتساب میدهد.
مثال
(a -= b) can be written as (a = a - b)
اگر مقدار اولیه ذخیرهشده در a برابر با ۸ باشد، سپس (a -= 6) برابر با ۲ خواهد بود.
- “=*” (انتساب ضرب Multiply Assignment): این عملگر ترکیبی از عملگرهای ‘*’ و ‘=’ است. ابتدا مقدار فعلی متغیر در سمت چپ را به مقدار موجود در سمت راست ضرب میکند و سپس نتیجه را به متغیر در سمت چپ انتساب میدهد.
مثال
(a *= b) can be written as (a = a * b)
اگر مقدار اولیه ذخیرهشده در a برابر با ۵ باشد، سپس (a *= 6) برابر با ۳۰ خواهد بود.
- “=/” (انتساب تقسیم Division Assignment): این عملگر ترکیبی از عملگرهای ‘/’ و ‘=’ است. ابتدا مقدار فعلی متغیر در سمت چپ را بر مقدار موجود در سمت راست تقسیم میکند و سپس نتیجه را به متغیر در سمت چپ انتساب میدهد.
مثال
(a /= b) can be written as (a = a / b)
اگر مقدار اولیه ذخیرهشده در a برابر با ۶ باشد، سپس (a /= 2) برابر با ۳ خواهد بود.
- “=%” (انتساب مقیاس Modulus Assignment): این عملگر ترکیبی از عملگرهای ‘%’ و ‘=’ است. ابتدا باقیمانده تقسیم مقدار فعلی متغیر در سمت چپ را بر مقدار موجود در سمت راست محاسبه میکند و سپس نتیجه را به متغیر در سمت چپ انتساب میدهد.
مثال
(a %= b) can be written as (a = a % b)
اگر مقدار اولیه ذخیرهشده در a برابر با ۶ باشد، سپس (a %= 2) برابر با ۰ خواهد بود.
- “=>>” (انتساب چپچرخش Left Shift Assignment): این عملگر ترکیبی از عملگرهای ‘>>’ و ‘=’ است. ابتدا مقدار فعلی متغیر در سمت چپ را به تعداد مشخص شده در سمت راست به سمت چپ جابجا میکند و سپس نتیجه را به متغیر در سمت چپ انتساب میدهد.
مثال
(a <<= 2) can be written as (a = a << 2)
اگر مقدار اولیه ذخیرهشده در a برابر با ۶ باشد، سپس (a <<= 2) برابر با ۲۴ خواهد بود.
- “=<<” (انتساب راستچرخش Right Shift Assignment): این عملگر ترکیبی از عملگرهای ‘<<’ و ‘=’ است. ابتدا مقدار فعلی متغیر در سمت چپ را به تعداد مشخص شده در سمت راست به سمت راست جابجا میکند و سپس نتیجه را به متغیر در سمت چپ انتساب میدهد.
مثال
(a >>= 2) can be written as (a = a >> 2)
- “=&” (انتساب AND بیتی Bitwise AND Assignment): این عملگر ترکیبی از اپراتورهای ‘&’ و ‘=’ است. این اپراتور ابتدا عمل AND بیتی را بر روی مقدار فعلی متغیر سمت چپ با مقدار سمت راست انجام میدهد و سپس نتیجه را به متغیر سمت چپ اختصاص میدهد.
مثال
(a &= 2) can be written as (a = a & 2)
- “=^” (انتساب XOR بیتی Bitwise Exclusive OR): این عملگر ترکیبی از اپراتورهای ‘^’ و ‘=’ است. این اپراتور ابتدا عمل XOR بیتی را بر روی مقدار فعلی متغیر سمت چپ با مقدار سمت راست انجام میدهد و سپس نتیجه را به متغیر سمت چپ اختصاص میدهد.
مثال
(a ^= 2) can be written as (a = a ^ 2)
- “=|” (انتساب OR بیتی Bitwise Inclusive OR): این عملگر ترکیبی از اپراتورهای ‘|’ و ‘=’ است. این اپراتور ابتدا عمل OR بیتی را بر روی مقدار فعلی متغیر سمت چپ با مقدار سمت راست انجام میدهد و سپس نتیجه را به متغیر سمت چپ اختصاص میدهد.
مثال
(a |= 2) can be written as (a = a | 2)
اگر مقدار اولیه ذخیره شده در a برابر با ۶ باشد، آنگاه: (a |= 2) = 6.
مثال
// C# program to demonstrate the working // of Assignment Operators using System; namespace Assignment { class ProgramStore { // Main Function static void Main(string[] args) { // initialize variable x // using Simple Assignment // Operator "=" int x = 15; // it means x = x + 10 x += 10; Console.WriteLine("Add Assignment Operator: " + x); // initialize variable x again x = 20; // it means x = x - 5 x -= 5; Console.WriteLine("Subtract Assignment Operator: " + x); // initialize variable x again x = 15; // it means x = x * 5 x *= 5; Console.WriteLine("Multiply Assignment Operator: " + x); // initialize variable x again x = 25; // it means x = x / 5 x /= 5; Console.WriteLine("Division Assignment Operator: " + x); // initialize variable x again x = 25; // it means x = x % 5 x %= 5; Console.WriteLine("Modulo Assignment Operator: " + x); // initialize variable x again x = 8; // it means x = x << 2 x <<= 2; Console.WriteLine("Left Shift Assignment Operator: " + x); // initialize variable x again x = 8; // it means x = x >> 2 x >>= 2; Console.WriteLine("Right Shift Assignment Operator: " + x); // initialize variable x again x = 12; // it means x = x >> 4 x &= 4; Console.WriteLine("Bitwise AND Assignment Operator: " + x); // initialize variable x again x = 12; // it means x = x >> 4 x ^= 4; Console.WriteLine("Bitwise Exclusive OR Assignment Operator: " + x); // initialize variable x again x = 12; // it means x = x >> 4 x |= 4; Console.WriteLine("Bitwise Inclusive OR Assignment Operator: " + x); } } }
خروجی
Add Assignment Operator: 25 Subtract Assignment Operator: 15 Multiply Assignment Operator: 75 Division Assignment Operator: 5 Modulo Assignment Operator: 0 Left Shift Assignment Operator: 32 Right Shift Assignment Operator: 2 Bitwise AND Assignment Operator: 4 Bitwise Exclusive OR Assignment Operator: 8 Bitwise Inclusive OR Assignment Operator: 12
عملگر شرطی در سی شارپ
این یک عملگر سهگانه است که نسخهای کوتاه از عبارت if-else میباشد. این عملگر سه عملوند دارد و به همین دلیل نام آن سهگانه است. این عملگر یکی از دو مقدار را بسته به مقدار یک عبارت بولی (درست یا نادرست) باز میگرداند.
سینتکس
condition ? first_expression : second_expression;
توضیح: شرط باید به درست یا نادرست ارزیابی شود. اگر شرط درست باشد، اولین عبارت ارزیابی میشود و نتیجه را به دست میدهد. اگر شرط نادرست باشد، دومین عبارت ارزیابی میشود و نتیجه را به دست میدهد.
مثال
// C# program to demonstrate the working // of Conditional Operator using System; namespace Conditional { class ProgramStore { // Main Function static void Main(string[] args) { int x = 5, y = 10, result; // To find which value is greater // Using Conditional Operator result = x > y ? x : y; // To display the result Console.WriteLine("Result: " + result); // To find which value is greater // Using Conditional Operator result = x < y ? x : y; // To display the result Console.WriteLine("Result: " + result); } } }
خروجی
Result: 10 Result: 5
نتیجه گیری
عملگرها در سی شارپ ابزارهای ضروری هستند که به برنامهنویسان امکان میدهند تا عملیات مختلف ریاضی، منطقی، مقایسهای و بیتی را به راحتی انجام دهند. استفاده بهینه از این عملگرها باعث سادهسازی کدها و افزایش خوانایی و کارایی برنامهها میشود. علاوه بر این، عملگرهای تخصیص و شرطی به برنامهنویسان این امکان را میدهند که به راحتی مقادیر متغیرها را تغییر داده و تصمیمات منطقی را در کدهای خود پیادهسازی کنند. بنابراین، آشنایی کامل با انواع مختلف عملگرها در سی شارپ و کاربردهای آنها برای هر برنامهنویس #C ضروری است تا بتواند از قابلیتهای زبان به بهترین نحو استفاده کند و برنامههای بهینه و کارآمدی تولید نماید.
بخش سوالات متداول برام خیلی مفید بود.
خیلی ممنون