PDA

View Full Version : عملگرها



dada_vahid
چهارشنبه 19 آبان 1389, 00:21 صبح
به نام خدا
دوستان خسته نباشید من توی برنامه نویسی خیلی خیلی باقالی هستم


من می خواستم در مورد عملگردها در c اطلاعاتی کسب کنم مطلبی که کامل باشه نمیدونم چنین منبعی وجود داره یا نه ممنون می شم کمکم کنید.


من داشتم در مورد همین موضوع مطلبی مختصری می خوندم برای من نا مفهوم بود
این اون مطلب

a=2;
b=1;

m=++a-b--
نتیجه :a=3 b=0 m=2
من دلیل این مطلب رو نفهمیدم ممنون می شم کمکم کنید

returnx
چهارشنبه 19 آبان 1389, 00:32 صبح
کتاب C اقای جعفر نژاد قومی کتاب بسیار خوبیه برای مرجع
در بحث اولویت بندی عملگر ها باید بدونی که یک سری عمل گر ها نسبت به دیگری اولویت داره مثلا همیشه () از +و- و... زود تر محاسبه میشه و اما
عبارت شما:

a=2;
کاملا مشخصه نیازی به توضیح نیست

b=1;

این هم همینطور

=++a-b--

در اینجا شما باید بدونید که a++ با ++a تفاوت داره در ++a اول a محاسبه شده و بعد یک واحد به ان اظافه می شود و لی در a++ اول یک واحد به a اظافه می شود بعد محاسبه می شه.(فکر میکنم کل نکتش اینجا بود)
برای یاد گیری بیشتر به صفحه 17 کتاب اقای جعفر نژاد قومی مراجعه کنید...

dada_vahid
چهارشنبه 19 آبان 1389, 00:53 صبح
ممنون
من موندم چرا m=2 شده البته
اگه من اشتباه نکرده باشم ترتیب تقدم عملگرد ها باید اینجور باشه
++--
-
*/%
+-
درسته دیگه؟؟؟؟
چرا بعد از اینکه یک واحد به a اضافه شد یک واحد از b کم نشد مگه تقدم این رو نمیگه؟؟؟؟
ممنون می شم ببینید من انقدر ها هم خنگ نیستم ولی تا مشکلم رو درک نکنم و ندونم کجایی کارم ایراد داره نمیتونم جلوتر برم الان میدنم که اون جواب ها چه جور بدست امده ولی میخوام کاملا روشن شم
ممنونم دوس عزیز

returnx
چهارشنبه 19 آبان 1389, 10:07 صبح
دوست من خوب به عملگر ها و نحوه اجرا شدن برنامه باید دقت کنی :
[

m=++a-b--

در اینجا ابتدا a به علاوه 2 میشه که جواب میشه 3
بعد از b کم میشه پس m میشه 3 منهای 1 که کاملا واضح هست جواب میشه 2
بعد از اینکه m برابر 2 شد حالا یک واحد به b اظافه میشه پس در جواب m هیچ تاثیری نداره...
اگر باز هم نامفهوم هست ما در خدمتیم...

dada_vahid
چهارشنبه 19 آبان 1389, 10:53 صبح
ممنونم بحث من بیشتر سر ترتیب عملگرد هاست که درست درک نمی کنم این چند خط کد رو نگاه کنید

#include<iostream.h>
#include<conio.h>
#include<stdio.h>
main()
{

int a,b,m;
a=2;
b=4;
m=-b+a++;
printf("%d%d%d",m,b,a);

getch();

}
خروجی برنامه این میشه-2 4 3
از نظر من طبق ترتیب عملگرد ها این برنامه نباید این خروجی رو بده
باز ممنونم

mohsensaghafi
چهارشنبه 19 آبان 1389, 11:49 صبح
سلام دوست عزیز.
آقای dada_vahid مشکل شما در مفهوم عملگر ++ و -- است. همانطور که می دانید این دو عملگر به دو صورت --value , value-- استفاده می شوند. شما در مفهوم --value ها دچار برداشت ناصحیح می باشید. این عملگر با توجه به اولویت عملگر ها در اولین اولویت بعد از () قرار می گیرد اما کار که انجام می دهد این است که یک واحد به مقدار متغیر اضافه (کم) می کند ولی مقدار قبلی متغیر را بر می گرداند. در مثالهایی که زدید m=-b+a++; در قسمت آخر (++a) یک واحد به a اضافه می کند که مقدار a برابر 3 می شود، اما مقدار قبلی آن که 2 است را بر می گرداند. پس مقدار m می شود 2+4- که برابر 2- می شود. a هم که مقدارش شده 3 و b هم که تغییری نکرده و مقدار 4 را کماکان دارد. پس خروجی کاملا منطقی می شود.
اما مثال اولی که زدید : m=++a-b-- مقدار a یک واحد اضاقه می شود و برابر 3 می شود و با توجه به شکل استفاده از عملگر ++ (a++ ) مقدار که برگردانده می شود همین مقدار جدید یعنی 3 می باشد. در مورد b یک واحد از آن کم می شود یعنی 0 ولی با توجه به نوع دستور (--b) مقدار قبلی b که 1 است برگردانده می شود. پس مقدار m برابر می شود با 1-3 که می شود 2.
به مفهموم --value دقت بیشتری بفرمایید.
باز هم اگر جایی نا مفهوم بود بگویید تا توضیح بیشتری ارائه کنم.
موفق و پیروز.

dada_vahid
چهارشنبه 19 آبان 1389, 20:16 عصر
ممنون از شما و دوست قبلی برای من روشن شد