در این جلسه از آموزش ++C به بررسی عملگرها در ++C خواهیم پرداخت. یک عملگر نمادی است که به کامپایلر اعلام میکند تا یک عمل منطقی یا ریاضی مشخص را انجام دهد. ++C منبعی غنی از عملگرهای درونی داشته و انواع عملگر زیر را فراهم آورده است:
- عملگرهای حسابی
- عملگرهای رابطهای
- عملگرهای منطقی
- عملگرهای بیتی
- عملگرهای تخصیص
- عملگرهای متفرقه
این بخش عملگرهای حسابی، رابطهای، منطقی، بیتی، تخصیص و دیگر عملگرها را توضیح خواهد داد.
عملگرهای حسابی (Arithmetic Operator)
++C از عملگرهای حسابی زیر پشتیبانی میکند.
فرض کنید متغیر A حاوی مقدار 10 و متغیر B حاوی مقدار 20 باشد، آنگاه:
عملگر |
توصیف |
مثال |
+ |
دو عملوند را باهم جمع میکند. |
A + B = 30 |
– |
عملوند دوم را از عملوند اول کم میکند. |
A – B = -10 |
* |
دو عملوند را در هم ضرب میکند. |
A * B = 200 |
/ |
صورت را بر مخرج تقسیم میکند. |
B / A = 2 |
% |
عملگر باقی مانده، باقی مانده یک تقسیم صحیح. |
B % A = 0 |
++ |
عملگر افزونه، یک واحد به عدد صحیح اضافه میکند. |
A++ = 11 |
– – |
عملگر کاهشی، یک واحد از عدد صحیح کم میکند. |
A – – = 9 |
عملگرهای رابطهای (Relational Operator)
++C از عملگرهای رابطهای زیر پشتیبانی میکند.
فرض کنید متغیر A حاوی مقدار 10 و متغیر B حاوی مقدار 20 باشد، آنگاه:
عملگر |
توصیف |
مثال |
== |
بررسی میکند که مقدار دو عملوند برابر هستند یا نه. اگر برابر باشند شرط درست است. |
(A == B) درست نیست. |
=! |
بررسی میکند که دو عملوند مخالف هم هستند یا نه، اگر مخالف باشند، شرط برقرار است. |
(A != B) درست است. |
< |
بررسی میکند که مقدار عملوند سمت چپ بزرگتر از مقدار عملوند سمت راست است یا نه، اگر بزرگتر باشد شرط برقرار است. |
(A > B) درست نیست. |
> |
بررسی میکند که مقدار عملوند سمت چپ کوچکتر از عملوند سمت راست هست یا نه، اگر کوچکتر باشد شرط برقرار میشود. |
(A < B) درست است. |
=< |
بررسی میکند که مقدار عملوند سمت چپ بزرگتر مساوی مقدار عملوند سمت راست است یا نه، اگر بزرگتر مساوی باشد شرط برقرار است. |
(A >= B) درست نیست. |
=> |
بررسی میکند که مقدار عملوند سمت چپ کوچکترمساوی مقدار عملوند سمت راست است یا نه، اگر کوچکترمساوی باشد شرط برقرار است. |
(A <= B) درست است. |
عملگرهای منطقی (Logical Operator)
++C از عملگرهای منطقی زیر پشتیبانی میکند.
فرض کنید متغیر A حاوی مقدار 10 و متغیر B حاوی مقدار 20 باشد، آنگاه:
عملگر |
توصیف |
مثال |
&& |
عملگر AND منطقی نامیده میشود. اگر هردو عملوند غیرصفر باشند، شرط برقرار میشود. |
(A && B) نادرست است. |
|| |
عملگر OR منطقی نامیده میشود. اگر یکی از دو عملوند غیرصفر باشند، شرط برقرار میشود. |
(A || B) درست است. |
! |
عملگر NOT منطقی نامیده میشود. برای معکوس کردن حالت منطقی یک عملوند به کار میرود. اگر شرط true باشد، آنگاه عملگر منطقی NOT آنرا false خواهد کرد. |
(A && B)! درست است. |
عملگرهای بیتی (Bitwise Operator)
عملگرهای بیتی روی بیتها عمل کرده و عملیات را به صورت بیت به بیت انجام میدهند. جدول صحت برای &، | و ^ در زیر آمده است:
p |
q |
p & q |
p | q |
p ^ q |
۰ |
۰ |
۰ |
۰ |
۰ |
۰ |
1 |
۰ |
1 |
1 |
1 |
1 |
1 |
1 |
۰ |
1 |
۰ |
۰ |
1 |
1 |
فرض کنید که A=100؛ B=13؛ اکنون در فرمت باینری این اعداد برابرند با:
A = 0011 1100
B = 0000 1101
————————–
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
A = 1100 0011~
عملگرهای بیتی که ++C از آنها پشتیبانی میکند در جدول زیر لیست شده اند.
فرض کنید متغیر A برابر 60 و متغیر B برابر 13 باشد، آنگاه:
عملگر |
توصیف |
مثال |
& |
عملگر AND باینری، اگر هر دوبیت 1باشند، نتیجه 1 و در غیر این صورت 0 خواهد بود. |
12 =(A & B) باینری = 1100 0000 |
| |
عملگر OR منطقی، اگر یکی از دوبیت 1 باشند نتیجه 1 و در غیراین صورت 0 خواهد بود. |
61 = (A | B) باینری = 1101 0011 |
^ |
عمگلر XOR باینری، اگر یکی از بیتها 1 و دیگری 0 باشد خروجی 1 و در غیر این صورت 0 خواهد بود. |
49 = (A ^ B) باینری = 0001 0011 |
~ |
عملگر مکمل یک باینری، یک مکمل یگانی است که بیتها را وارونه میکند. |
61– = (A~) که 0011 1100 در فرم مکمل 2 است بخاطر اینکه عدد باینری علامت دار است. |
>> |
عملگر شیفت سمت چپ باینری. مقدار عملوند سمت چپ به اندازه بیتهای مشخص شده در عملوند سمت راست، به چپ جابجا میشود. |
A << 2 = 240 باینری = 0000 1111 |
<< |
عملگر شیفت سمت راست باینری. مقدار عملوند سمت چپ به اندازه بیتهای مشخص شده در عملوند سمت راست، به راست جابجا میشود. |
A >> 2 = 15 باینری = 1111 0000 |
عملگرهای تخصیص (Assignment Operator)
عملگرهای تخصیص که ++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 است. |
=<< |
عملگر شیفت سمت راست و تخصیص |
C >>= 2 مشابه C = C >> 2 است. |
=& |
عملگر AND بیتی و تخصیص |
C &= 2 مشابه C = C & 2 است. |
=^ |
عملگر OR انحصاری بیتی و تخصیص |
C ^= 2 مشابه C = C ^ 2 است. |
=| |
عملگر OR غیرانحصاری بیتی و تخصیص |
C |= 2 مشابه C = C | 2 است. |
عملگرهای متفرقه (Misc Operator)
لیست زیر مجموعه دیگر عملگرهایی است که ++C از آنها پشتیبانی میکند.
ردیف |
عملگر و توصیف آن |
1 |
sizeof عملگر sizeof اندازه یک متغیر را برمیگرداند. برای مثال، sizeof(a)، اگر a یک متغیر integer باشد، مقدار 4 را برمیگرداند. |
2 |
Condition ? X : Y عمگلر شرطی(؟)، اگر شرط درست باشد مقدار X را برمیگرداند و درغیراین صورت مقدار Y را برمیگرداند. |
3 |
, عملگر کاما سبب انجام یک سلسله عملیات میشود. مقدار کل عبارت کاما، مقدار عبارت آخر در لیستی است که با کاما از هم جدا شده اند. |
4 |
. (dot) and -> (arrow) عملگرهای عضوی (member operator) برای ارجاع به اعضای کلاسها، ساختارها و یونیونها استفاده میشود. |
5 |
Cast عملگر تبدیل (Cast) یک نوع داده را به یک نوع داده دیگر تبدیل میکند. برای مثال، int(2.2000) مقدار 2 را برمیگرداند. |
6 |
& عملگر اشاره گر (pointer operator)& آدرس یک متغیر را برمیگرداند. برای مثال، a& آدرس واقعی متغیر را برمیگرداند. |
7 |
* عملگر اشاره گر*، اشاره گر به یک مقدار است. برای مثال، var* یک اشاره گر به متغیر var خواهد بود. |
اولویت عملگرها در ++C
اولویت عملگرها گروهبندی جملات در یک عبارت را تعیین میکند. این اولویتها نحوه ارزیابی عبارت را تحت تاثیر قرار میدهند.برخی علمگرهای مشخص دارای اولویت بالاتری نسبت به برخی دیگر هستند؛ برای مثال، عملگر ضرب اولویت بالاتری نسبت به عملگر جمع دارد.
مثلاً x=7 + 3 * 2؛ در اینجا، بجای 20، 13 به x اختصاص داده میشود زیرا عملگر * اولویت بالاتری نسبت به + دارد، بنابراین ابتدا 3*2 انجام گرفته و سپس با 7 جمع میشود.
در جدول زیر، عملگر با بالاترین اولویت در بالای جدول قرار میگیرد، و عملگرهای با اولویت پایین تر در پایین جدول قرار میگیرند. درون یک عبارت، ابتدا عملگرهای با اولویت بالاتر ارزیابی میشوند.
دسته |
عملگر |
شرکت پذیری |
پسوندی |
– – ++ . <– [] ()
|
چپ به راست |
یگانی |
+ – ! ~ ++ – – (type)* & sizeof |
راست به چپ |
ضربی |
* / % |
چپ به راست |
جمعی |
+ – |
چپ به راست |
شیفت |
<< >> |
چپ به راست |
رابطه ای |
< <= > >= |
چپ به راست |
تساوی |
== != |
چپ به راست |
AND بیتی |
& |
چپ به راست |
XOR بیتی |
^ |
چپ به راست |
OR بیتی |
| |
چپ به راست |
AND منطقی |
&& |
چپ به راست |
OR منطقی |
|| |
چپ به راست |
شرطی |
?: |
راست به چپ |
تخصیص |
= += -= *= /= %=>>= <<= &= ^= |= |
راست به چپ |
کاما |
, |
چپ به راست |
منبع: ترجمه از سایت tutorialspoint.com
در جلسه بعدی آموزش زبان ++C با ما همراه باشید.
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.