عملگرها
عملگر، نمادی است که به کامپایلر می گوید تا عملیات محاسباتی یا منطقی خاصی را برروی یک یا چند عملوند، انجام دهد. به عملگرهایی که فقط یک عملوند دارند، عملگر یکانی می گوییم و همواره عملگر در سمت چپ عملوند قرار می گیرد(مانند عدد -125). اما عملگرهایی که برروی دو عملوند اثر می کنند را عملگر دودویی نامیده و عملگر را بین دو عملوند قرار می دهیم (مانند 23+86). هر ترکیب درستی از عملگرها و عملوندها را یک عبارت می نامیم.
C از نقطه نظر عملگرها یک زبان بسیار قوی است. این عملگرها به چند دسته اصلی تقسیم می گردند که آنها را به ترتیب بررسی می کنیم..
عملگرهای محاسباتی
این عملگرها، همان اعمال متداول ریاضی هستند که در زبان C مورد استفاده قرار می گیرند. این اعمال عبارتند از :
عمل |
نوع |
عملگر |
منفی کردن عملوند سمت راست |
یکانی |
- |
جمع دو عملوند |
دودویی |
+ |
تفریق دو عملوند |
دودویی |
- |
ضرب دو عملوند |
دودویی |
* |
تقسیم دو عملوند |
دودویی |
/ |
محاسبه باقیمانده تقسیم دو عملوند |
دودویی |
% |
عملگرهای فوق برروی همه انواع داده های C عمل می کنند بجز عملگر % که فقط برروی نوع داده های صحیح عمل میکند و برروی داده های اعشاری تعریف نشده است. اما نکته مهمی که باید به آن اشاره کرد، نحوه کار عملگر تقسیم برروی نوع داده های مختلف است. درصورتیکه هردو عملوند صحیحی باشند، تقسیم بصورت صحیح بر صحیح انجام خواهد شد. اما اگر یکی یا هر دو عملوند اعشاری باشند، تقسیم بصورت اعشاری انجام خواهد پذیرفت. فرض کنید تعاریف زیر را داریم :
int a,b ;
float c,d ;
a = 10 ; b = 4 ;
c = 8.2; d = 4.0;
اکنون به نتایج عملیات زیر دقت کنید :
a / b = < 2
c / d = < 2.05
a / d = < 2.5
a / 4 = < 2
چنانچه به آخرین مورد توجه کنید، متوجه می شوید که از آنجا که a یک متغیر صحیح است و 4 نیز یک ثابت صحیح در نظر گرفته شده، درنتیجه تقسیم بصورت صحیح بر صحیح انجام گرفته است. چنانچه بخواهیم تقسیم بصورت اعشاری صورت پذیرد، به دو شکل می توانیم عمل کنیم. اول اینکه آن را بصورت a / 4.0 بنویسیم و دوم اینکه از عملگر قالب ریزی استفاده کنیم.
عملگر قالب ریزی می تواند یک نوع را به نوع دیگری تبدیل نماید. شکل کلی آن به شکل زیر است :
(< type >) < expression >
که type نوع مورد نظر است که قصد تبدیل عبارت expression به آن نوع را داریم. بعنوان مثال در مورد بالا می توان به شکل زیر عمل کرد :
(float) a / 4
در این حالت ابتدا از کامپایلر خواسته ایم که ابتدا عدد a را به اعشاری تبدیل کند (البته بصورت موقت) و سپس آن را بر 4 تقسیم نماید، که مسلما حاصل اعشاری خواهد بود.
بطورکلی هرگاه ثابتها و متغیرهایی از انواع مختلف در یک عبارت محاسباتی داشته باشیم، کامپایلر C همه آنها را به یک نوع یکسان که همان بزرگترین عملوند موجود است تبدیل خواهد کرد. بعنوان مثال به مورد زیر دقت کنید :
نکته بسار مهم دیگری که باید به آن توجه کرد، اولویت عملگرها است. یعنی در عبارتی که شامل چندین عملگر است، کدامیک در ابتدا اعمال خواهد گردید. اولویت عملگرهای محاسباتی از بالا به پایین بشرح زیر است:
1 عملگر یکانی –
2 عملگرهای * و / و %
3 عملگر های + و –
چنانچه اولویت دو عملگر یکسان باشد، این عملگرها از چپ به راست محاسبه خواهند شد.چنانچه بخواهیم یک عمل با اولویت پایین زودتر انجام شود، باید از پرانتز استفاده کنیم. بنابراین اولویت عملگر پرانتز از همه موارد فوق بیشتراست. در مورد پرانتزهای متداخل، ابتدا پرانتز داخلی محاسبه می شود؛ اما در مورد پرانتزهای هم سطح، ابتدا پرانتز سمت چپتر محاسبه می گردد. به چند مثال زیر دقت کنید: