سه شنبه ۱۸ دي ۱۴۰۳
Tut24 آموزش برنامه نویسی و مجله تخصصی فناوری ورود/عضویت

آموزش سی شارپ - اپراتورها

اپراتور (عملگر) یک نماد است که به کامپایلر می‌گوید که چه نوع عملیات ریاضی یا منطقی را انجام دهد. سی شارپ (C#) دارای مجموعه‌ای بسیار غنی از اپراتورهای داخلی است و انواعی از اپراتورها را در ادامه معرفی می‌کند:

  • اپراتورهای حسابی (Arithmetic Operators)
  • اپراتورهای نسبتی (Relational Operators)
  • اپراتورهای منطقی (Logical Operators)
  • اپراتورهای بیتی (Bitwise Operators)
  • اپراتورهای اختصاصی (Assignment Operators)
  • سایر اپراتورها (Misc Operators)

این آموزش به صورت جزئیات به توضیح اپراتورهای حسابی، نسبتی، منطقی، بیتی، اختصاصی و سایر اپراتورها می‌پردازد.

اپراتورهای حسابی

جدول زیر تمامی اپراتورهای حسابی پشتیبانی شده در سی شارپ (C#) را نشان می‌دهد. در این جدول فرض شده است که متغیر A شامل عدد 10 و متغیر B شامل عدد 20 است.

نمونه‌ها را ببینید

عملگر توضیح مثال
+ دو عملوند را با هم جمع می‌کند A + B = 30
- از عملوند دوم، عملوند اول را کم می‌کند A - B = -10
* ضرب دو عملوند را با هم محاسبه می‌کند A * B = 200
/ تقسیم مقسوم بر مقسوم علیه را محاسبه می‌کند B / A = 2
% عملگر باقی‌مانده و باقی‌مانده بعد از یک تقسیم صحیح را محاسبه می‌کند B % A = 0
++ عملگر افزایش مقدار عدد صحیح را یک واحد افزایش می‌دهد A++ = 11
-- عملگر کاهش مقدار عدد صحیح را یک واحد کاهش می‌دهد A-- = 9

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

جدول زیر تمامی عملگرهای رابطه‌ای پشتیبانی شده توسط C# را نمایش می‌دهد. فرض کنید متغیر A مقدار 10 و متغیر B مقدار 20 را دارد، آنگاه −

نمایش مثال‌ها

عملگر توضیحات مثال
== بررسی می‌کند که مقدار دو عملوند برابر است یا نه؛ اگر بله، شرط درست می‌شود. (A == B) درست نیست.
!= بررسی می‌کند که مقدار دو عملوند برابر است یا نه؛ اگر نه، شرط درست می‌شود. (A != B) درست است.
> بررسی می‌کند که مقدار عملوند چپ از مقدار عملوند راست بزرگتر است یا نه؛ اگر بله، شرط درست می‌شود. (A > B) درست نیست.
< بررسی می‌کند که مقدار عملوند چپ از مقدار عملوند راست کوچکتر است یا نه؛ اگر بله، شرط درست می‌شود. (A < B) درست است.
>= بررسی می‌کند که مقدار عملوند چپ از مقدار عملوند راست بزرگتر یا برابر است یا نه؛ اگر بله، شرط درست می‌شود. (A >= B) درست نیست.
<= بررسی می‌کند که مقدار عملوند چپ از مقدار عملوند راست کوچکتر یا برابر است یا نه؛ اگر بله، شرط درست می‌شود. (A <= B) درست است.

اپراتورهای منطقی

در جدول زیر تمام اپراتورهای منطقی پشتیبانی شده توسط C# نمایش داده شده‌اند. فرض کنید متغیر A شامل مقدار بولین true و متغیر B شامل مقدار بولین false باشد، در این صورت −

نمونه‌ها را نمایش بدهید

اپراتور توضیح مثال
&& اپراتور AND منطقی نامیده می‌شود. اگر هر دو عملگر غیرصفر باشند، شرط درست می‌شود. (A && B) درست نیست.
|| اپراتور OR منطقی نامیده می‌شود. اگر هر یک از دو عملگر غیرصفر باشند، شرط درست می‌شود. (A || B) درست است.
! اپراتور NOT منطقی نامیده می‌شود. برای برعکس کردن حالت منطقی عملگر خود استفاده می‌شود. اگر شرط درست باشد، اپراتور NOT منطقی آن را غلط می‌کند. !(A && B) درست است.

اپراتورهای بیتی

اپراتورهای بیتی (Bitwise) بر روی بیت‌ها کار می‌کنند و عملیات بیت به بیت را انجام می‌دهند. جداول درستی برای &، |، و ^ به شرح زیر است −

p q p & q p | q p ^ q
0 0 0 0 0
0 1 0 1 1
1 1 1 1 0
1 0 0 1 1

فرض کنید اگر A برابر 60 و B برابر 13 باشد، آنگاه در فرمت دودویی آن‌ها به شرح زیر است −

A = 0011 1100

B = 0000 1101

-------------------

A&B = 0000 1100

A|B = 0011 1101

A^B = 0011 0001

~A  = 1100 0011

اپراتورهای بیتی (Bitwise) پشتیبانی شده توسط C# در جدول زیر لیست شده‌اند. فرض کنید متغیر A مقدار 60 و متغیر B مقدار 13 را نگه می‌دارد، آنگاه −

نمونه‌ها را نشان بده

اپراتور توضیحات مثال
& اپراتور AND دودویی (Binary)، یک بیت را به نتیجه کپی می‌کند اگر این بیت در هر دو اپراند وجود داشته باشد. (A & B) = 12، که به صورت دودویی 0000 1100 می‌باشد.
| اپراتور OR دودویی (Binary)، یک بیت را کپی می‌کند اگر این بیت در یکی از اپراند ها وجود داشته باشد. (A | B) = 61، که به صورت دودویی 0011 1101 می‌باشد.
^ اپراتور XOR دودویی (Binary)، بیت را کپی می‌کند اگر فقط در یکی از اپراند ها وجود داشته باشد و در هر دو اپراند نباشد. (A ^ B) = 49، که به صورت دودویی 0011 0001 می‌باشد.
~ اپراتور تکمل یکی (Ones Complement)، یک اپراتور یکانی است که تاثیر افکار (flipping) بیت ها را دارد. (~A ) = -61، که به صورت دودویی 1100 0011 در مبنای دو برای اعداد دودویی منفی (Signed Binary Number) می‌باشد.
<< اپراتور شیفت چپ دودویی (Binary Left Shift Operator). مقدار اپراند چپ به تعداد بیت‌های مشخص شده در اپراند راست شیفت داده می‌شود. A << 2 = 240، که به صورت دودویی 1111 0000 می‌باشد.
>> اپراتور شیفت راست دودویی (Binary Right Shift Operator). مقدار اپراند چپ به تعداد بیت‌های مشخص شده در اپراند راست شیفت داده می‌شود. A >>2 = 15, که هست 0000 1111

عملگرهای اختصاصی

در C#، عملگرهای اختصاصی زیر پشتیبانی می‌شوند −

نمونه‌ها را نمایش بدهید

اپراتور شرح مثال
= اپراتور اختصاص ساده، مقدار سمت راست را به عنوان مقدار سمت چپ اختصاص می‌دهد C = A + B مقدار A + B را به C اختصاص می‌دهد
+= اپراتور افزودن و اختصاص، مقدار سمت راست را به مقدار سمت چپ اضافه کرده و نتیجه را به مقدار سمت چپ اختصاص می‌دهد C += A معادل C = C + A است
-= اپراتور کم کردن و اختصاص، مقدار سمت راست را از مقدار سمت چپ کم کرده و نتیجه را به مقدار سمت چپ اختصاص می‌دهد C -= A معادل C = C - A است
*= اپراتور ضرب و اختصاص، مقدار سمت راست را با مقدار سمت چپ ضرب کرده و نتیجه را به مقدار سمت چپ اختصاص می‌دهد C *= A معادل C = C * A است
/= اپراتور تقسیم و اختصاص، مقدار سمت چپ را با مقدار سمت راست تقسیم کرده و نتیجه را به مقدار سمت چپ اختصاص می‌دهد C /= A معادل C = C / A است
%= اپراتور باقی‌مانده و اختصاص، باقی‌مانده را با استفاده از دو عملوند محاسبه کرده و نتیجه را به مقدار سمت چپ اختصاص می‌دهد C %= A معادل C = C % A است
<<= اپراتور انتقال به چپ و اختصاص C <<= 2 معادل C = C << 2 است
>>= اپراتور شیفت به راست و انتساب AND (Right shift AND assignment operator) C >>= 2 برابر با C = C >> 2 است
&= اپراتور AND بیتی و انتساب (Bitwise AND assignment operator) C &= 2 برابر با C = C & 2 است
^= اپراتور XOR بیتی و انتساب (Bitwise exclusive OR and assignment operator) C ^= 2 برابر با C = C ^ 2 است
|= اپراتور OR بیتی و انتساب (Bitwise inclusive OR and assignment operator) C |= 2 برابر با C = C | 2 است

اپراتورهای متفرقه

تعداد کمی از اپراتورهای مهم دیگر شامل sizeof، typeof و ? : توسط C# پشتیبانی می‌شوند.

نمونه‌ها را نشان بدهید

اپراتور توضیحات مثال
sizeof() اندازه یک نوع داده‌ای را برمی‌گرداند. sizeof(int)، بازگشت مقدار 4 را دارد.
typeof() نوع یک کلاس را برمی‌گرداند. typeof(StreamReader);
& آدرس یک متغیر را برمی‌گرداند. &a؛ بازگشت آدرس واقعی متغیر را دارد.
* نشانگری به یک متغیر. *a؛ یک نشانگر به نام 'a' به یک متغیر ایجاد می‌کند.
? : عبارت شرطی اگر شرط درست باشد ، مقدار X برگردانده شود در غیر این صورت مقدار Y برگردانده شود.
is تعیین می‌کند آیا یک شیء از یک نوع خاص است یا نه. اگر (Ford is Car) باشد، بررسی می‌کند که فورد یک شیء از کلاس Car باشد یا خیر.
as تبدیل نوع به صورت بدون ایجاد استثنا در صورت شکست تبدیل. Object obj = new StringReader("Hello");

StringReader r = obj as StringReader;

اولویت اپراتورها در C#

اولویت عملگرها گروه‌بندی مفاهیم در یک عبارت را مشخص می‌کند. این موضوع بر ارزیابی یک عبارت تأثیرگذار است. برخی از عملگرها دارای اولویت بالاتری هستند نسبت به دیگران؛ به عنوان مثال، عملگر ضرب دارای اولویت بالاتری نسبت به عملگر جمع است.

به عنوان مثال، در عبارت x = 7 + 3 * 2؛ x برابر 13 و نه 20 مقداردهی می‌شود زیرا عملگر ضرب دارای اولویت بالاتری نسبت به جمع است، لذا ابتدا 3*2 محاسبه شده و سپس 7 به آن اضافه می‌شود.

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

نمایش نمونه ها

رده عملگر ارتباط
پسوندی () [] -> . ++ - - از چپ به راست
یکانی + - ! ~ ++ - - (نوع)* & sizeof از راست به چپ
ضربی * / % از چپ به راست
جمعی + - از چپ به راست
شیفت << >> از چپ به راست
رابطه‌ای < <= > >= از چپ به راست
برابری == != از چپ به راست
بیتی AND & از چپ به راست
بیتی XOR ^ از چپ به راست
بیتی OR | از چپ به راست
AND منطقی && از چپ به راست
OR منطقی || از چپ به راست
شرطی ?: از راست به چپ
تخصیص = += -= *= /= %=>>= <<= &= ^= |= از راست به چپ
کاما , از چپ به راست