Latest topics
» GORG_HO3ein & TATALOO & PISHRO New Musicby saeid Tue Sep 22, 2015 12:51 am
» Black Cat Massanger Irani Started
by saeid Mon Jul 13, 2015 12:58 am
» telegram (BOTFATHER)
by saeid Mon Jul 13, 2015 12:34 am
» Wow Sorate Download Net RighTel
by saeid Wed Apr 15, 2015 1:52 pm
» بدباز پلاک یاب ورژن 2
by saeid Sun Apr 12, 2015 12:15 pm
» Internet 3G RighTel
by sarina Sat Apr 11, 2015 3:00 pm
» zapya For android
by saeid Sat Apr 11, 2015 12:52 pm
» معرفی بازی Boom Beach
by Mehdi Sat Apr 11, 2015 12:46 pm
» دانلود مستقیم adobe photoshop cs6
by Mehdi Sat Apr 11, 2015 12:45 pm
» مادرم هميشه دوستت دارم!! روزت مبارك
by saeid Fri Apr 10, 2015 1:53 am
» Topic Jame New Music
by saeid Wed Apr 08, 2015 3:25 pm
» Help Me To RighTel
by saeid Sun Apr 05, 2015 6:26 pm
» امکانات جدید وایبر
by Vampier Sun Apr 05, 2015 5:18 pm
» ربات کلش آف کلنز نسخه اندروید
by saeid Sun Apr 05, 2015 5:00 pm
» دانلــــــود سریال در حاشـــیه
by Mehdi Sat Apr 04, 2015 11:47 pm
Search
Who is online?
In total there are 2 users online :: 0 Registered, 0 Hidden and 2 Guests None
Most users ever online was 13 on Fri Sep 15, 2023 3:07 pm
درس دوم – عبارات، انواع و متغيرها در C#
درس دوم – عبارات، انواع و متغيرها در C#
درس دوم – عبارات، انواع و متغيرها در C#
متغيرها، به بيان بسيار ساده، مكانهايي جهت ذخيره اطلاعات هستند. شما اطلاعاتي را در يك متغير قرار ميدهيد و از اين اطلاعات بوسيله متغير در عبارات C# استفاده مينماييد. كنترل نوع اطلاعات ذخيره شده در متغيرها بوسيله تعيين كردن نوع براي هر متغير صورت ميپذيرد.
C# زباني بسيار وابسته به انواع است، بطوريكه تمامي عملياتي كه بر روي دادهها و متغيرها در اين زبان انجام ميگيرد با دانستن نوع آن متغير ميسر ميباشد. قوانيني نيز براي تعيين اينكه چه عملياتي بر روي چه متغيري انجام شود نيز وجود دارد.(بسته به نوع متغير)
انوع ابتدايي زبان C# شامل : يك نوع منطقي(Boolean) و سه نوع عددي اعداد صحيح(integer)، اعداد اعشاري(Floating points) و اعداد دسيمال(Decimal) ميباشد.(به انواع Boolean از اينرو منطقي ميگوييم كه تنها داراي دو حالت منطقي صحيح(True) و يا غلط(False) ميباشند.)
مثال 1 – نشان دادن مقادير منطقي (Boolean)
[ltr]using System;[/ltr][ltr]class Booleans[/ltr]
[ltr]{[/ltr]
[ltr] public static void Main()[/ltr]
[ltr] {[/ltr]
[ltr] bool content = true;[/ltr]
[ltr] bool noContent = false;[/ltr]
[ltr] Console.WriteLine("It is {0} that C# Persian provides C# programming language[/ltr]
[ltr] content.", content);[/ltr]
[ltr] Console.WriteLine("The statement above is not {0}.", noContent);[/ltr]
[ltr] }[/ltr]
[ltr]}[/ltr]
در اين مثال، مقادير منطقي متغيرهاي Boolean به عنوان قسمتي از جمله در خروجي نمايش داده ميشوند. متغيرهاي bool تنها ميتوانند يكي از دو مقدار true يا false را داشته باشند، يعني همانند برخي از زبانهاي برنامهسازي مشابه، مانند C و يا C++، مقدار عددي نميپذيرند، زيرا همانگونه كه ميدانيد در اين دو زبان هر مقدار عددي صحيح مثبت بغير از صفر به عنوان true و عدد صفر به عنوان false در نظر گرفته ميشود و در حقيقت نوع bool در اين دو زبان نوعي integer ميباشند. اما در زبان C# انواع bool يكي از دو مقدار true يا false را ميپذيرند. خروجي برنامه بالا به صورت زير است :
[ltr]It is True that C# Persian provides C# programming language content.[/ltr][ltr]The statement above is not False.[/ltr]
جدول زير تمامي انواع عددي صحيح C#، اندازه آنها و رنج قابل قبول آنها را نشان ميدهد.
رنج قابل قبول اندازه به بيت نوع 128- تا 127 8 sbyte 0 تا 255 8 byte 32768- تا 32767 16 short 0 تا 65535 16 ushort 2147483648- تا 2147483647 32 int 0 تا 4294967295 32 uint 9223372036854775808- تا 9223372036854775807 64 long 0 تا 18446744073709551615 64 ulong
از اين انواع براي محاسبات عددي استفاده ميگردد. يك نوع ديگر را نيز ميتوان در اين جدول اضافه نمود و آن نوع char است. هر چند شايد از نظر بسياري از دوستاني كه با زبانهاي ديگر برنامهسازي كار كردهاند اين تقسيم بندي غلط به نظر آيد، اما بايد گفت كه در زبان C# نوع char نيز نوع خاصي از انواع عددي است كه رنجي بين صفر تا 65535 دارد و اندازه آن نيز 16 بيتي است، اما به جاي نمايش دادن مقادير عددي تنها ميتواند بيان كننده يك كاراكتر باشد. در آينده در اين مورد بيشتر توضيح خواهم داد.
جدول زير تمامي انواع عددي اعشاري زبان C# را نمايش ميدهد.
رنج قابل قبول دقت اندازه به بيت نوع تا 7 رقم 32 float تا 15-16 رقم 64 double تا 28-29 رقم دسيمال 128 decimal
انواعي از نوع floating point هنگامي استفاده ميشوند كه محاسبات عددي به دقتهاي اعشاري نياز داشته باشند. همچنين براي منظورهاي تجاري استفاده از نوع decimal بهترين گزينه است. اين نوع تنها در زبان C# وجود دارد و در زبانهاي مشابه به آن نظير Java چنين نوعي در نظر گرفته نشده است.
در يك زبان برنامهسازي نتايج بوسيله ايجاد يك سري عبارت توليد ميگردند. عبارات از تركيب متغيرها و عملگرها در دستورالعملهاي يك زبان ايجاد ميگردند.(توجه نماييد كه عبارت معادل expression و دستورالعمل معادل statement ميباشد كه ايندو با يكديگر متفاوت ميباشند.) جدول زير عملگرهاي موجود در زبان C#، حق تقدم آنها و شركتپذيري آنها را نشان ميدهد.
شركتپذيري عملگر(ها) نوع عمل از چپ (x) x.y f(x) a[x] x++ x--new typeof sizeof checked unchecked عمليات ابتدايي از چپ + - ! ~ ++x --x (T)x عمليات يكاني از چپ * / % عمليات ضربي از چپ - + عمليات جمعي از چپ << >> عمل شيفت از چپ < > <= >= is عمليات رابطهاي از راست == != عمليات تساوي از چپ & عمل AND منطقي از چپ | عمل OR منطقي از چپ ^ عمل XOR منطقي از چپ && عمل AND شرطي از چپ || عمل OR شرطي از چپ ?: عمل شرطي از راست = *= /= %= += -= <<= >>= &= ^= |= عمل انتساب
شركتپذيري از چپ بدين معناست كه عمليات از چپ به راست محاسبه ميشوند. شركتپذيري از راست بدين معناست كه تمامي محاسبات از راست به چپ صورت ميگيرند. به عنوان مثال در يك عمل تساوي، ابتدا عبارات سمت راست تساوي محاسبه شده و سپس نتيجه به متغير سمت چپ تساوي تخصيص داده ميشود.
مثال 2- عملگرهاي يكاني (Unary)
[ltr]using System;[/ltr][ltr]class Unary[/ltr]
[ltr]{[/ltr]
[ltr] public static void Main()[/ltr]
[ltr] {[/ltr]
[ltr] int unary = 0;[/ltr]
[ltr] int preIncrement;[/ltr]
[ltr] int preDecrement;[/ltr]
[ltr] int postIncrement;[/ltr]
[ltr] int postDecrement;[/ltr]
[ltr] int positive;[/ltr]
[ltr] int negative;[/ltr]
[ltr] sbyte bitNot;[/ltr]
[ltr] bool logNot;[/ltr]
[ltr] preIncrement = ++unary;[/ltr]
[ltr] Console.WriteLine("Pre-Increment: {0}", preIncrement);[/ltr]
[ltr] preDecrement = --unary;[/ltr]
[ltr] Console.WriteLine("Pre-Decrement: {0}", preDecrement);[/ltr]
[ltr] postDecrement = unary--;[/ltr]
[ltr] Console.WriteLine("Post-Decrement: {0}", postDecrement);[/ltr]
[ltr] postIncrement = unary++;[/ltr]
[ltr] Console.WriteLine("Post-Increment: {0}", postIncrement);[/ltr]
[ltr] Console.WriteLine("Final Value of Unary: {0}", unary);[/ltr]
[ltr] positive = -postIncrement;[/ltr]
[ltr] Console.WriteLine("Positive: {0}", positive);[/ltr]
[ltr] negative = +postIncrement;[/ltr]
[ltr] Console.WriteLine("Negative: {0}", negative);[/ltr]
[ltr] bitNot = 0;[/ltr]
[ltr] bitNot = (sbyte)(~bitNot);[/ltr]
[ltr] Console.WriteLine("Bitwise Not: {0}", bitNot);[/ltr]
[ltr] logNot = false;[/ltr]
[ltr] logNot = !logNot;[/ltr]
[ltr] Console.WriteLine("Logical Not: {0}", logNot);[/ltr]
[ltr] }[/ltr]
[ltr]}[/ltr]
به هنگام محاسبه عبارات، دو عملگر x++ و x—(كه در اينجا كاراكتر x بيان كننده آن است كه عملگرهاي ++ و – در جلوي عملوند قرار ميگيرند post-increment و post-decrement) ابتدا مقدار فعلي عملوند (operand) خود را باز ميگرداند و سپس به عملوند خود يك واحد اضافه كرده يا از آن يك واحد ميكاهند. عملگر ++ يك واحد به عملوند خود اضافه ميكند و عملگر – يك واحد از عملوند خود ميكاهد. بدين ترتيب عبارت x++ معادل است با عبارت x=x+1 و يا x+=1 اما همانطور كه گفته شد بايد توجه داشته باشيد كه اين عملگرها(++ و --) ابتدا مقدار فعلي عملوند خود را برگشت ميدهند و سپس عمل خود را روي آنها انجام ميدهند. بدين معني كه در عبارت x=y++ در صورتيكه در ابتداي اجراي برنامه مقدار x=0 و y=1 باشد، در اولين اجراي برنامه مقدار x برابر با 1 يعني مقدار y ميشود و سپس به متغير y يك واحد افزوده ميشود، در صورتيكه اگر اين عبارت را بصورت x=++y بنويسيم در اولين اجراي برنامه، ابتدا به مقدار متغير y يك واحد افزوده ميشود و سپس اين مقدار به متغير x تخصيص داده ميشود كه در اين حالت مقدار متغير x برابر با 2 ميشود.(در مورد عملگر – نيز چنين است.) پس با اين توضيح ميتوان گفت كه دو عملگر ++x و –x ابتدا به عملوند خود يك واحد اضافه يا يك واحد از آن كم ميكنند و سپس مقدار آنها را باز ميگردانند.
در مثال 2، مقدار متغير unary در قسمت اعلان برابر با 0 قرار گرفته است. هنگاميكه از عملگر ++x استفاده ميكنيم، به مقدار متغير unary يك واحد افزوده ميشود و مقدارش برابر با 1 ميگردد و سپس اين مقدار، يعني 1، به متغير preIncrement تخصيص داده ميشود. عملگر –x مقدار متغير unary را به 0 باز ميگرداند و سپس اين مقدار را به متغير preDecrement نسبت ميدهد.
هنگاميكه از عملگر x-- استفاده ميشود، مقدار متغير unary، يا همان مقدار صفر، به متغير postDecrement تخصيص داده ميشود و سپس از مقدار متغير unary يك واحد كم شده و مقدار اين متغير به 1- تغيير ميكند. سپس عملگر x++ مقدار متغير unary، يعني همان 1-، را به متغير postIncrement تخصيص ميدهد و سپس يك واحد به مقدار متغير unary ميافزايد تا مقدار اين متغير برابر با 0 (صفر) شود.
مقدار متغير bitNot در هنگام اعلان برابر با صفر است. با استفاده از عملگر نقيض بيتي (~) (يا عملگر مكملگيري) متغير bitNot بعنوان يك بايت در نظر گرفته ميشود و مقدار آن منفي يا نقيض ميشود. در عمليات بيتي نقيض بدين معناست كه تمامي يكها به صفر و تمامي صفرها به يك تبديل شوند. در اين حالت نمايش باينري عدد صفر يا همان 00000000 به نقيض آن يعني 11111111 تبديل ميگردد.
در اين مثال به عبارت (sbyte)(~bitNot) توجه نماييد. هر عملي كه بر روي انواع short،unshort ، byte و sbyte انجام شود، مقداري از نوع int را باز ميگرداند. بمنظور اينكه بتوانيم نتيجه دلخواه را به متغير bitNot تخصيص دهيم بايد از فرمت (Type) operator استفاده نماييم كه در آن Type نوعي است ميخواهيم نتيجه ما به آن نوع تبديل شود و operator عملي است كه بر روي متغير صورت ميپذيرد. به بيان ديگر چون ميخواهيم مقدار متغير bitNot بصورت بيتي در نظر گرفته شود، پس بايد نتيجه عمل ما بصورت بيتي در آن ذخيره شود كه استفاده از نوع sbyte باعث ميشود تا نتيجه به فرم بيتي (يا بايتي) در متغير ما ذخيره شود. بايد توجه نماييد كه استفاده از فرمت (Type) يا در اصطلاح عمل Casting، در مواقعي كه ميخواهيم تغييري از يك نوع بزرگتر به نوع كوچكتر ايجاد نماييم، مورد استفاده قرار گيرد، چرا كه در اين حالات ممكن است با از دست دادن اطلاعات مواجه باشيم. در اين مثال چون ميخواهيم نوع بزرگتر int را به(32 بيتي) به نوع كوچكتر sbyte (8 بيتي) تبديل نماييم، بدين منظور بايد بطور صريح از عمل Casting استفاده نماييم تا اطلاعاتي در اين تبديل از بين نرود. در مورد تبديل انواع كوچكتر به انواع بزرگتر(مثلا تبديل sbyte به int) نيازي به استفاده از عمل Casting نيست چرا كه امكان از بين رفتن اطلاعات وجود ندارد. در ضمن بايد به يك نكته مهم توجه نماييد و آن تبديل انواع علامتدار(Signed) و بدون علامت(Unsigned) به يكديگر است. در اين حالت خطر بسيار مهمي دادههاي شما را تهديد مينمايد. بحث در مورد مسائل پيچيدهتر در مورد تبديل انواع علامتدار و و بدون علامت به يكديگر در اينجا نميگنجد و سعي ميكنم تا آنها را در مطالب بعدي و در جاي لازم مورد بحث و بررسي قرار دهم.(در صورتيكه برخي از مطالب اين قسمتها براي شما به خوبي قابل درك نيست، نگران نباشيد چراكه در آينده در مثالهايي كه خواهيد ديد تمامي اين مطالب را در عمل نيز حس كرده و با آنها آشنا خواهيد شد.)
عملگر بعدي كه در اين برنامه مورد استفاده قرار گرفته است، عملگر نقيض منطقي يا همان "!" است كه امكان تغيير مقدار يك متغير Boolean را از true به false و بالعكس را فراهم ميآورد. در مثال بالا(مثال شماره 2) مقدار متغير logNot پس از استفاده از عملگر "!" از false به true تغيير كرده است. با توجه به توضيحات اخير خروجي زير از برنامه مثال 2 مورد انتظار است :
[ltr]Pre-Increment: 1[/ltr]
[ltr]Pre-Decrement 0[/ltr]
[ltr]Post-Decrement: 0[/ltr]
[ltr]Post-Increment -1[/ltr]
[ltr]Final Value of Unary: 0[/ltr]
[ltr]Positive: 1[/ltr]
[ltr]Negative: -1[/ltr]
[ltr]Bitwise Not: -1[/ltr]
[ltr]Logical Not: True[/ltr]
مثال 3 – عملگرهاي دوتايي
[ltr]using System;[/ltr][ltr]class Binary[/ltr]
[ltr]{[/ltr]
[ltr] public static void Main()[/ltr]
[ltr] { [/ltr]
[ltr] int x, y, result;[/ltr]
[ltr] float floatResult;[/ltr]
[ltr] x = 7;[/ltr]
[ltr] y = 5;[/ltr]
[ltr] result = x+y;[/ltr]
[ltr] Console.WriteLine("x+y: {0}", result);[/ltr]
[ltr] result = x-y;[/ltr]
[ltr] Console.WriteLine("x-y: {0}", result);[/ltr]
[ltr] result = x*y;[/ltr]
[ltr] Console.WriteLine("x*y: {0}", result);[/ltr]
[ltr] result = x/y;[/ltr]
[ltr] Console.WriteLine("x/y: {0}", result);[/ltr]
[ltr] floatResult = (float)x/(float)y;[/ltr]
[ltr] Console.WriteLine("x/y: {0}", floatResult);[/ltr]
mamad- Good Member
- Nimbuzz ID: : المديــــر@nim
Posts : 16
Join date : 2015-03-25
Location : uni.khoram abad
Permissions in this forum:
You cannot reply to topics in this forum
|
|