مبانی زبان سی شارپ PDF

Document Details

PleasedOnomatopoeia

Uploaded by PleasedOnomatopoeia

Tags

سی شارپ عملگرهای سی شارپ برنامه نویسی برنامه نویسی کامپیوتر

Summary

این سند خلاصه ای از مقدمات زبان برنامه نویسی سی شارپ و عملگرهای این زبان است. عملگرها و انواع مختلف آنها، از جمله عملگرهای ریاضی، تخصیص، مقایسه، منطقی و بیتی، توضیح داده شده است. همچنین، مثال هایی از نحوه کارکرد عملگرها در برنامه نویسی سی شارپ ارائه شده است.

Full Transcript

# مبانی زبان سی شارپ ## مقدار val مقدار val هر نوع داده ای میتواند باشد اما باید مطمئن شد که به نوع داده ای مورد نظر تبدیل شود. ## عبارات و عملگرها ابتدا با دو کلمه آشنا شوید : * عملگر : نمادهایی هستند که اعمال خاص انجام می دهند. * عملوند : مقادیری که عملگرها بر روی آنها عملی انجام می دهند. مث...

# مبانی زبان سی شارپ ## مقدار val مقدار val هر نوع داده ای میتواند باشد اما باید مطمئن شد که به نوع داده ای مورد نظر تبدیل شود. ## عبارات و عملگرها ابتدا با دو کلمه آشنا شوید : * عملگر : نمادهایی هستند که اعمال خاص انجام می دهند. * عملوند : مقادیری که عملگرها بر روی آنها عملی انجام می دهند. مثلا `X+Y`، یک عبارت است که در آن X و Y عملوند و علامت + عملگر به حساب می آیند. زبانهای برنامه نویسی جدید دارای عملگرهایی هستند که از اجزاء معمول زبان به حساب می آیند. سی شارپ دارای عملگرهای مختلفی از جمله عملگرهای ریاضی ، تخصیصی ، مقایسه ای ، منطقی و بیتی میباشد از عملگرهای ساده ریاضی می توان به عملگر جمع و تفریق اشاره کرد. سه نوع عملگر در سی شارپ وجود دارد : * یگانی (`Unary`) - به یک عملوند نیاز دارد * دودویی (`Binary`) - به دو عملوند نیاز دارد * سه تایی (`Ternary`) - به سه عملوند نیاز دارد انواع مختلف عملگر که در این بخش مورد بحث قرار میگیرند عبارتند از : * عملگرهای ریاضی * عملگرهای تخصیصی * عملگرهای مقایسه ای * عملگرهای منطقی * عملگرهای بیتی ## عملگرهای ریاضی سی شارپ از عملگرهای ریاضی برای انجام محاسبات استفاده میکند جدول زیر عملگرهای ریاضی سی شارپ را نشان می دهد : | دسته | عملگر | نتیجه | مثال | |---|---|---|---| | Binary | + | Var1 برابر است با حاصل جمع var2 و var3 | `var1 = var2 + var3;` | | Binary | - | Var1 برابر است با حاصل تفريق var2 و var3 | `var1 = var2 – var3;` | | Binary | * | Var1 برابر است با حاصلضرب var2 در var3 | `var1 = var2 * var3;` | | Binary | / | Vari برابر است با حاصل تقسیم var2 بر var3 | `var1 = var2/ var3;` | | Binary | % | var3 و var2 برابر است با باقیمانده تقسیم Varl | `var1 = var2% var3;` | | Unary | + | Var1 برابر است با مقدار var2 | `var1 = +var2;` | | Unary | - | Var1 برابر است با مقدار var2 ضربدر 1 | `var1 = -var2` | مثال بالا در از نوع عددی استفاده شده است. اما استفاده از عملگرهای ریاضی برای نوع رشته ای نتیجه متفاوتی دارد. همچنین در جمع دو کاراکتر کامپایلر معادل عددی آنها را نشان میدهد اگر از عملگر + برای رشته ها استفاده کنیم دو رشته را با هم ترکیب کرده و به هم می چسباند دیگر عملگرهای سی شارپ عملگرهای کاهش و افزایش هستند. این عملگرها مقدار 1 را از متغیر ها کم یا به آنها اضافه میکنند از این متغیرها اغلب در حلقه ها استفاده می شود : | دسته | عملگر | نتیجه | مثال | |---|---|---|---| | Unary | ++ | مقدار var1 برابر است با var2 بعلاوه 1 | `var1 = ++var2;` | | Unary | -- | متغیر var2 یک واحد اضافه می شود | | | Unary | -- | مقدار var1 برابر است با var2 منهای 1 | `var1 = --var2;` | | Unary | ++ | متغیر var2 یک واحد کم می شود. | | | Unary | ++ | مقدار var1 برابر است با var2 | `var1 = var2++;` | | Unary | -- | | `var1 = var2--;` | به این نکته توجه داشته باشید که محل قرار گیری عملگر در نتیجه محاسبات تاثیر دارد اگر عملگر قبل از متغیر `var2` بیاید افزایش یا کاهش `var1` اتفاق می افتد و `var2` تغییر نمی کند. چنانچه عملگرها بعد از متغیر `var2` قرار بگیرند ابتدا `var1` برابر `var2` میشود و سپس متغیر `var2` افزایش یا کاهش می یابد به مثالهای زیر توجه کنید : ```c# using System; namespace ConsoleApplication5 { class Program { static void Main(string[] args) { int x = 0; int y = 1; X = ++y; Console.WriteLine("x= {0}",x); Console.WriteLine("y= {0}", y); Console.ReadLine(); } } } ``` x=2 y=2 ```c# using System; namespace ConsoleApplication5 { class Program { static void Main(string[] args) { int x = 0; int y = 1; X = --y; Console.WriteLine("x= {0}",x); Console.WriteLine("y= {0}", y); Console.ReadLine(); } } } ``` x=0 y=0 همانطور که در دو مثال بالا مشاهده میکنید درج عملگرهای `--` و `++` قبل از عملوند y باعث میشود که ابتدا یک واحد از `y` کم و یا یک واحد به `y` اضافه شود و سپس نتیجه در عملوند x قرار بگیرد. حال به دو مثال زیر توجه کنید : ```c# using System; namespace ConsoleApplication5 { class Program { static void Main(string[] args) { int x = 0; int y = 1; x = y--; Console.WriteLine("x= {0}",x); Console.WriteLine("y= {0}", y); Console.ReadLine(); } } } ``` x=1 y=0 ```c# using System; namespace ConsoleApplication5 { class Program { static void Main(string[] args) { int x = 0; int y = 1; X = y++; Console.WriteLine("x= {0}",x); Console.WriteLine("y= {0}", y); Console.ReadLine(); } } } ``` x=1 y=2 همانطور که در دو مثال بالا مشاهده میکنید درج عملگرهای `--` و `++` بعد از عملوند `y` باعث میشود که ابتدا مقدار `y` در داخل متغیر `x` قرار بگیرد و سپس یک واحد از `y` کم و یا یک واحد به آن اضافه شود. حال میتوانیم با ایجاد یک برنامه نحوه عملکرد عملگرهای ریاضی در سی شارپ را یاد بگیریم : ```c# using System; public class Program { public static void Main() { //Variable declarations int num1, num2; string msg1, msg2; //Assign test values num1 = 5; num2 = 3; msg2 = "World!"; //Demonstrate use of mathematical operators Console.WriteLine("The sum of {0} and {1} is {2}.", num1, num2, (num1 + num2)); Console.WriteLine("The difference of {0} and {1} is {2}.", num1, num2, (num1 - num2)); Console.WriteLine("The product of {0} and {1} is {2}.", num1, num2, (num1 * num2)); Console.WriteLine("The quotient of {0} and {1} is {2:F2}.", num1, num2, ((double) num1 / num2)); Console.WriteLine("The remainder of {0} divided by {1} is {2}", num1, num2, (num1 % num2)); //Demonstrate concatenation on strings using the + operator msg1 = "Hello "; Console.WriteLine(msg1 + msg2); } } ``` The sum of 5 and 3 is 8. The difference of 5 and 3 is 2. The product of 5 and 3 is 15. The quotient of 5 and 3 is 1.67. The remainder of 5 divided by 3 is 2 Hello World! برنامه بالا نتیجه هر عبارت را نشان میدهد. در این برنامه از متد (Writeline برای نشان دادن نتایج در سطرهای متفوت استفاده شده است. در این مثال با یک نکته عجیب مواجه میشویم و آن حاصل تقسیم دو عدد صحیح است. وقتی که دو عدد صحیح را بر هم تقسیم کنیم حاصل باید یک عدد صحیح و فاقد بخش کسری باشد اما همانطور که مشاهده می کنید اگر فقط یکی از اعداد را به نوع اعشاری `double` تبدیل کنیم در مثال میبینید حاصل به صورت اعشار نشان داده می شود. برای اینکه ارقام کسری بعد از عدد حاصل دو رقم باشند از `{F2:2}` استفاده میکنیم F به معنای فرمت بندی می باشد و در این جا بدین معناست که عدد را تا دو رقم اعشار نمایش بده چون خطوط کد طولانی هستند آنها را در دو خط می نویسیم. سی شارپ خط جدید و فاصله و فضای خالی را نادیده می گیرد. در خط 29 مشاهده میکنید که دو رشته به وسیله عملگر + به هم متصل شده اند نتیجه استفاده از عملگر + برای چسباندن دو کلمه “ Hello“ و ”!World“ رشته ”!Hello World“ خواهد بود به فاصله های خالی بعد از اولین کلمه توجه کنید. اگر آنها را حذف کنید از خروجی برنامه نیز حذف می شوند. ## عملگرهای تخصیصی ) جایگزینی) نوع دیگر از عملگرهای سی شارپ عملگرهای جایگزینی نام دارند. این عملگرها مقدار متغیر سمت راست خود را در متغیر سمت چپ قرار میدهند. جدول زیر انواع عملگرهای تخصیصی در سی شارپ را نشان می دهد | عملگر | مثال | نتیجه | |---|---|---| | = | `var1 = var2;` | مقدار var1 با است با مقدار var2 | | += | `var1 += var2;` | مقدار var1 با است با حاصل جمع var1 و var2 | | -= | `var1 -= var2;` | مقدار var1 با است با حاصل تفريق var1 و var2 | | *= | `var1 *= var2;` | مقدار var1 با است با حاصل ضرب var1 در var2 | | /= | `var1 /= var2;` | مقدار var1 با است با حاصل تقسیم var1 بر var2 | | %= | `var1 %= var2;` | var2 بر var1 با است با باقیمانده تقسیم var1 مقدار | از عملگر + برای اتصال دو رشته نیز میتوان استفاده کرد استفاده از این نوع عملگرها در واقع یک نوع خلاصه نویسی در کد است. مثلا شکل اصلی کد `var1 = var2` به صورت `var1 = var1 + var2` می باشد. این حالت کدنویسی زمانی کارایی خود را نشان می دهد که نام متغیرها طولانی باشد. برنامه زیر چگونگی استفاده از عملگرهای تخصیصی و تاثیر آنها را بر متغیر ها نشان می دهد. ```c# using System; public class Program { public static void Main() { int number; Console.WriteLine("Assigning 10 to number..."); number = 10; Console.WriteLine("Number = {0}", number); Console.WriteLine("Adding 10 to number..."); number += 10; Console.WriteLine("Number = {0}", number); Console.WriteLine("Subtracting 10 from number..."); number -= 10; Console.WriteLine("Number = {0}", number); } } ``` Assigning 10 to number... Number = 10 Adding 10 to number... Number = 20 Subtracting 10 from number... Number = 10 در برنامه از ۳ عملگر تخصیصی استفاده شده است. ابتدا یک متغیر و مقدار ۱۰ با استفاده از عملگر = به آن اختصاص داده شده است. سپس به آن با استفاده از عملگر =+ مقدار ۱۰ اضافه شده است. و در آخر به وسیله عملگر =- عدد ۱۰ از آن کم شده است. ## عملگرهای مقایسه ای از عملگرهای مقایسه ای برای مقایسه مقادیر استفاده میشود. نتیجه این مقادیر یک مقدار بولی (منطقی است. این عملگرها اگر نتیجه مقایسه دو مقدار درست باشد مقدار `true` و اگر نتیجه مقایسه اشتباه باشد مقدار `false` را نشان می دهند. این عملگرها به طور معمول در دستورات شرطی به کار می روند به این ترتیب که باعث ادامه یا توقف دستور شرطی می شوند. جدول زیر عملگرهای مقایسه ای در سی شارپ را نشان می دهد | دسته | عملگر | نتیجه | مثال | |---|---|---|---| | Binary | == | var1 در صورتی `true` است که مقدار var2 با مقدار var3 برابر باشد در غیر اینصورت `false` است | `var1 = var2 == var3` | | Binary | != | var1 در صورتی `true` است که مقدار var2 با مقدار var3 برابر نباشد در غیر اینصورت `false` است | `var1 = var2 != var3` | | Binary | < | var1 در صورتی `true` است که مقدار var2 کوچکتر از var3 مقدار باشد در غیر اینصورت `false` است | `var1 = var2 < var3` | | Binary | > | var1 در صورتی `true` است که مقدار var2 بزرگتر از مقدار var3 باشد در غیر اینصورت `false` است | `var1 = var2 > var3` | | Binary | <= | var1 در صورتی `true` است که مقدار var2 کوچکتر یا مساوی مقدار var3 باشد در غیر اینصورت `false` است | `var1 = var2 <= var3` | | Binary | >= | var1 در صورتی `true` است که مقدار var2 بزرگتر یا مساوی var3 مقدار باشد در غیر اینصورت `false` است | `var1 = var2 >= var3` | برنامه زیر نحوه عملکرد ای عملگرها را نشان می دهد : ```c# using System; namespace ComparisonOperators { class Program { static void Main() { int num1 = 10; int num2 = 5; Console.WriteLine("{0} == {1} : {2}", num1, num2, num1 == num2); Console.WriteLine("{0} != {1} : {2}", num1, num2, num1 != num2); Console.WriteLine("{0} < {1} : {2}", num1, num2, num1 < num2); Console.WriteLine("{0} > {1}{2}", num1, num2, num1 > num2); Console.WriteLine("{0} <= {1} : {2}", num1, num2, num1 <= num2); Console.WriteLine("{0} >= {1} : {2}", num1, num2, num1 >= num2); } } } ``` 10 == 5: False 10 != 5 : True 10 < 5: False 10 > 5 : True 10 <= 5 : False 10 >= 5 : True در مثال بالا ابتدا دو متغیر را که میخواهیم با هم مقایسه کنیم را ایجاد کرده و به آنها مقادیری اختصاص می دهیم. سپس با استفاده از یک عملگر مقایسه ای آنها را با هم مقایسه کرده و نتیجه را چاپ میکنیم به این نکته توجه کنید که هنگام مقایسه دو متغیر از عملگر `==` به جای عملگر `=` باید استفاده شود. عملگر `=` عملگر تخصیصی است و در عبارتی مانند `x = y` مقدار `y` را در به `x` اختصاص میدهد. عملگر `==` عملگر مقایسه ای است که دو مقدار را با هم مقایسه میکند مانند `x==y` و اینطور خوانده میشود `x` برابر است با `y` . ## عملگرهای منطقی عملگرهای منطقی بر روی عبارات منطقی عمل میکنند و نتیجه آنها نیز یک مقدار بولی است. از این عملگرها اغلب برای شرطهای پیچیده استفاده میشود همانطور که قبلا یاد گرفتید مقادیر بولی میتوانند `false` یا `true` باشند. فرض کنید که `var2` و `var3` دو مقدار بولی هستند. | دسته | نام | عملگر | مثال | |---|---|---|---| | منطقی Binary | AND | `&&` | `var1 = var2 && var3;` | | منطقی Binary | OR | `||` | `var1 = var2 || var3;` | | منطقی Unary | NOT | `!` | `var1 = !var1;` | ### عملگر منطقی AND (&&) اگر مقادیر دو طرف عملگر true باشند عملگر AND مقدار true را بر میگرداند در غیر اینصورت اگر یکی از مقادیر یا هر دوی آنها false باشند مقدار false را بر می گرداند. در زیر جدول درستی عملگر AND نشان داده شده است : | X | Y | X && Y | |---|---|---| | true | true | true | | true | false | false | | false | true | false | | false | false | false | برای درک بهتر تاثیر عملگر AND یاد آوری میکنم که این عملگر فقط در صورتی مقدار true را نشان می دهد که هر دو عملوند مقدارشان true باشد. در غیر اینصورت نتیجه تمام ترکیبهای بعدی false خواهد شد. استفاده از عملگر AND مانند استفاده از عملگرهای مقایسه ای است به عنوان مثال نتیجه عبارت زیر درست (true) است اگر سن (age) بزرگتر از ۱۸ و `salary` کوچکتر از ۱۰۰۰ باشد. `result = (age > 18) && (salary < 1000);` عملگر AND زمانی کارآمد است که ما با محدوده خاصی از اعداد سرو کار داریم مثلا عبارت `100 => x => 10` بدین معنی است که `x` میتواند مقداری شامل اعداد ۱۰ تا ۱۰۰ را بگیرد حال برای انتخاب اعداد خارج از این محدوده می توان از عملگر منطقی AND به صورت زیر استفاده کرد. `inRange = (number <= 10) && (number >= 100);` ### عملگر منطقی (||) OR اگر یکی یا هر دو مقدار دو طرف عملگر OR ،درست (true) باشد، عملگر OR مقدار true را بر میگرداند. جدول درستی عملگر OR در زیر نشان داده شده است : | X | Y | X || Y | |---|---|---| | true | true | true | | true | false | true | | false | true | true | | false | false | false | در جدول بالا مشاهده میکنید که عملگر OR در صورتی مقدار false را بر میگرداند که مقادیر دو طرف آن false باشند. کد زیر را در نظر بگیرید نتیجه این کد در صورتی درست (true) است که رتبه نهایی دانش آموز (finalGrade) بزرگتر از ۷۵ یا یا نمره نهایی امتحان آن ۱۰۰ باشد. `isPassed = (finalGrade >= 75) || (finalExam == 100);` ### عملگر منطقی (!)NOT برخلاف دو اپراتور OR و AND عملگر منطقی NOT یک عملگر یگانی است و فقط به یک عملوند نیاز دارد. این عملگر یک مقدار یا اصطلاح بولی را نفی میکند مثلا اگر عبارت یا مقدار true باشد آنرا false و اگر false باشد آنرا true می کند | X | ! X | |---|---| | true | false | | false | true | نتیجه کد زیر در صورتی درست است که age (سن) بزرگتر یا مساوی ۱۸ نباشد. `isMinor = !(age >= 18);` ## عملگرهای بیتی عملگرهای بیتی به شما اجازه میدهند که شکل باینری انواع داده ها را دستکاری کنید برای درک بهتر این درس توصیه می شود که شما سیستم باینری و نحوه تبدیل اعداد اعشاری به باینری را یاد بگیرید. در سیستم باینری (دودویی که کامپیوتر از آن استفاده میکند وضعیت هر چیز یا خاموش است یا روشن برای نشان دادن حالت روشن از عدد ۱ و برای نشان دادن حالت خاموش از عدد . استفاده می.شود بنابراین اعداد باینری فقط میتوانند صفر یا یک باشند اعداد باینری را اعداد در مبنای 2 و اعداد اعشاری را اعداد در مبنای 10 میگویند یک بیت نشان دهنده یک رقم باینری است و هر بایت نشان دهنده 8 بیت است. به عنوان مثال برای یک داده از نوع int به 32 بیت یا 8 بایت فضا برای ذخیره آن نیاز داریم، این بدین معناست که اعداد از 32 رقم 0 و 1 برای ذخیره استفاده میکنند برای مثال عدد 100 وقتی به عنوان یک متغیر از نوع int ذخیره میشود در کامپیوتر به صورت زیر خوانده می شود : `000000000000000000000000000001100100` عدد 100 در مبنای ده معادل عدد 1100100 در مبنای 2 است. در اینجا 7 رقم سمت راست نشان دهنده عدد 100 در مبنای 2 است و مابقی صفرهای سمت راست برای پر کردن بیتهایی است که عدد از نوع int نیاز دارد به این نکته توجه کنید که اعداد باینری از سمت راست به چپ خوانده میشوند. عملگرهای بیتی سی شارپ در جدول زیر نشان داده شده اند : | مثال | دسته | نام | عملگر | |---|---|---|---| | `x = y & z;` | منطقی Binary | AND بیتی | & | | `x = y | z;` | منطقی Binary | OR بیتی | \| | | `x = y^z;` | منطقی Binary | XOR بیتی | ^ | | `x = ~y;` | منطقی Unary | NOT بیتی | ~ | | `x &= y;` | منطقی Binary | AND Assignment بیتی | &= | | `x = y;` | منطقی Binary | OR Assignment بیتی | \| = | | `x^= y;` | منطقی Binary | XOR Assignment بیتی | ^= | ### عملگر بیتی (`AND(&)`) عملگر بیتی AND مانند کاری شبیه عملگر منطقی AND انجام می دهد با این تفاوت که این عملگر بر روی بیتها کار می کند. اگر مقادیر دو طرف آن 1 باشد مقدار 1 را بر میگرداند و اگر یکی یا هر دو طرف آن صفر باشد مقدار صفر را بر می گرداند. جدول درستی عمگر بیتی AND در زیر آمده است: | X | Y | X AND Y | |---|---|---| | 1 | 1 | 1 | | 1 | 0 | 0 | | 0 | 1 | 0 | | 0 | 0 | 0 | در زیر نحوه استفاده از عملگر بیتی AND آمده است : ```c# int result = 5 & 3; Console.WriteLine(result); ``` 1 همانطور که در مثال بالا مشاهده میکنید نتیجه عملکرد عملگر AND بر روی دو مقدار 5 و 3 عدد یک میشود. اجازه بدهید ببینیم که چطور این نتیجه را به دست می آید: ```c# 5: 00000000000000000000000000000101 3: 00000000000000000000000000000011 1: 00000000000000000000000000000001 ``` ابتدا دو عدد 5 و 3 به معادل باینری شان تبدیل میشوند. از آنجاییکه هر عدد صحیح (int) 32 بیت است از صفر برای پر کردن بیتهای خالی استفاده میکنیم با استفاده از جدول درستی عملگر بیتی ANDمی توان فهمید که چرا نتیجه عدد یک می شود. ### عملگر بیتی (1)OR اگر مقادیر دو طرف عملگر بیتی OR هر دو صفر باشند نتیجه صفر در غیر اینصورت 1 خواهد شد جدول درستی این عملگر در زیر آمده است : | X | Y | X XOR Y | |---|---|---| | 1 | 1 | 1 | | 1 | 0 | 1 | | 0 | 1 | 1 | | 0 | 0 | 0 | نتیجه عملگر بیتی OR در صورتی صفر است که عملوند های دو طرف آن صفر باشند. اگر فقط یکی از دو عملوند یک باشد نتیجه یک خواهد شد. به مثال زیر توجه کنید : ```c# int result = 7 | 9; Console.WriteLine(result); ``` 15 وقتی که از عملگر بیتی OR برای دو مقدار در مثال بالا (7) و (9) استفاده میکنیم نتیجه 15 میشود. حال بررسی می کنیم که چرا این نتیجه به دست آمده است؟ ```c# 7: 00000000000000000000000000000111 9: 00000000000000000000000000001001 15:00000000000000000000000000001111 ``` با استفاده از جدول درستی عملگر بیتی OR می توان نتیجه استفاده از این عملگر را تشخیص داد. عدد 1111 باینری معادل عدد 15 صحیح است. ### عملگر بیتی (^)XOR جدول درستی این عملگر در زیر آمده است : | X | Y | X XOR Y | |---|---|---| | 1 | 1 | 0 | | 1 | 0 | 1 | | 0 | 1 | 1 | | 0 | 0 | 0 | در صورتیکه عملوندهای دو طرف این عملگر هر دو صفر یا هر دو یک باشند نتیجه صفر در غیر اینصورت نتیجه یک می شود. در مثال زیر تاثیر عملگر بیتی XOR را بر روی دو مقدار مشاده می کنید : ```c# int result = 5 ^ 7; Console.WriteLine(result); ``` 2 در زیر معادل باینری اعداد بالا (5) و (7) نشان داده شده است. ```c# 5: 00000000000000000000000000000101 7: 00000000000000000000000000000111 2: 00000000000000000000000000000010 ``` با نگاه کردن به جدول درستی عملگر بیتی XOR می توان فهمید که چرا نتیجه عدد 2 می شود. ### عملگر بیتی (~)NOT این عملگر یک عملگر یگانی است و فقط به یک عملوند نیاز دارد. در زیر جدول درستی این عملگر آمده است: | X | NOT X | |---|---| | 1 | 0 | | 0 | 1 | عملگر بیتی NOT مقادیر بیتها را معکوس میکند. در زیر چگونگی استفاده از این عملگر آمده است : ```c# int result = ~7; Console.WriteLine(result); ``` به نمایش باینری مثال بالا که در زیر نشان داده شده است توجه نمایید. ```c# 7: 00000000000000000000000000000111 -8: 11111111111111111111111111111000 ``` #### مثالهایی از عملگرهای بیتی فرض کنید که از یک سبک خاص فونت در برنامه تان استفاده کنید. کدهای مربوط به هر سبک هم در جدول زیر آمده است : | کد | سبک | |---|---| | 0 | Regular | | 1 | Bold | | 2 | Italic | | 4 | Underline | | 8 | Strikeout | توجه کنید که مقدار اولیه صفر بدین معنی است که میخواهید از سبک `regular` (عادی) استفاده کنید. ```c# int fontStyle = 0; ``` برای نشان دادن فونتها به صورت کلفت (Bold) از عملگر بیتی OR استفاده میشود. توجه کنید که برای فونت Bold باید کد 1 را به کار برید. ```c# fontStyle = fontStyle | 1; ``` برای استفاده از سبک Italic باید از عملگر بیتی OR و کد 2 استفاده شود. ```c# fontStyle |= 2; ``` برای استفاده از سایر سبک ها میتوان به روشهای ذکر شده در بالا عمل کرد و فقط کدها را جایگزین کنید اگر بخواهید یک سبک جدید ایجاد کنید که ترکیبی از چند سبک باشد میتوانید به سادگی عملگر بیتی OR را در بین هر سبک فونت قرار دهید مانند مثال زیر : ```c# fontStyle = 1|2|4 | 8; ``` ### عملگر بیتی تغییر مکان (shift) این نوع عملگرها به شما اجازه میدهند که بیتها را به سمت چپ یا راست جا به جا کنید. دو نوع عملگر بیتی تغییر مکان وجود دارد که هر کدام دو عملوند قبول میکنند عملوند سمت چپ این عملگرها حالت باینری یک مقدار و عملوند سمت راست تعداد جا به جایی بیت ها را نشان می دهد. | عملگر | دسته | نام | مثال | |---|---|---|---| | << | منطقی Binary | تغییر مکان به سمت چپ | `x = y << 2;` | | >> | منطقی Binary | تغییر مکان به سمت راست | ` x = y >> 2;` | #### عملگر تغییر مکان به سمت چپ این عملگر بیتهای عملوند سمت چپ را به تعداد n مکان مشخص شده توسط عملوند سمت راست به سمت چپ منتقل می کند. به عنوان مثال : ```c# int result = 10 << 2; Console.WriteLine(result); ``` 40 در مثال بالا ما بیتهای مقدار 10 را دو مکان به سمت چپ منتقل کرده ایم حال بیایید تاثیر این انتقال را بررسی کنیم : ```c# 10: 00000000000000000000000000001010 40: 00000000000000000000000000101000 ``` مشاهده میکنید که همه بیت ها به اندازه دو واحد به سمت چپ منتقل شده اند. در این انتقال دو صفر از صفرهای سمت چپ کم می شود و در عوض دو صفر به سمت راست اضافه می شود. #### عملگر تغییر مکان به سمت راست این عملگر شبیه به عمگر تغییر مکان به سمت چپ است با این تفاوت که بیتها را به سمت راست جا به جا می کند. به عنوان مثال : ```c# int result = 100 >> 4; Console.WriteLine(result); ``` 6 با استفاده از عملگر تغییر مکان به سمت راست بیتهای مقدار 100 را به اندازه 4 واحد به سمت چپ جا به جا می کنیم. اجازه بدهید تاثیر این جا به جایی را مورد بررسی قرار دهیم : ```c# 100: 00000000000000000000000001100100 6: 00000000000000000000000000000110 ``` هر بیت به اندازه 4 واحد به سمت راست منتقل میشود بنابراین 4 بیت اول سمت راست حذف شده و چهار صفر به سمت چپ اضافه می شود. ## تقدم عملگرها تقدم عملگرها مشخص میکند که در محاسباتی که بیش از دو عملوند دارند ابتدا کدام عملگر اثرش را اعمال کند. عملگرها در سی شارپ در محاسبات دارای حق تقدم هستند. به عنوان مثال : `number = 1+2*3 / 1;` اگر ما حق تقدم عملگرها را رعایت نکنیم و عبارت بالا را از سمت چپ به راست انجام دهیم نتیجه 9 خواهد شد ((1+2)*3) سپس 3 ضربدر 9 و در آخر (9/19). اما کامپایلر با توجه به تقدم عملگرها محاسبات را انجام میدهد. برای مثال عمل ضرب و تقسیم نسبت به جمع و تفریق تقدم دارند بنابراین در مثال فوق ابتدا عدد 2 ضربدر 3 و سپس نتیجه آنها تقسیم بر 1 می شود که نتیجه 6 به دست می آید در آخر عدد 6 با 1 جمع میشود و عدد 7 حاصل میشود در جدول زیر تقدم برخی از عملگرهای سی شارپ آمده است : | عملگرها | تقدم | |---|---| | `++` , `--` (used as prefixes); `+` , `-` (unary( | بالاترین | | `*`, `/`, `%` | | | `+`, `-` | | | `<<`, `>>` | | | `<`, `>`, `<=`, `>=` | | | `==`, `!=` | | | `&` | | | `^` | | | `\|` | | | `&&` | | | `\| \|` | | | `=`, `*=`, `/=` , `%=` , `+=`, `-=` | | | `++`, `--` (used as suffixes) | پایین ترین | ابتدا عملگرهای با بالاترین و سپس عملگرهای با پایین ترین حق تقدم در محاسبات تاثیر میگذارند به این نکته توجه کنید که تقدم عملگرها `++` و `-` به مکان قرارگیری آنها بستگی دارد در سمت چپ یا راست عملوند باشند. به عنوان مثال : ```c# int number = 3; number1 = 3 + ++number; //results to 7 number2 = 3 + number++; //results to 6 ``` ## گرفتن ورودی از کاربر چارچوب دات نت تعدادی متد برای گرفتن ورودی از کاربر در اختیار شما قرار می دهد. حال می خواهیم در باره متد `ReadLine()` یکی دیگر از متدهای کلاس Console بحث کنیم که یک مقدار رشته ای را از کاربر دریافت می کند. متد `ReadLine()` فقط مقدار رشته ای را که توسط کاربر نوشته میشود را بر میگرداند. همانطور که از نام این متد پیداست، تمام کاراکترهایی را که شما در محیط کنسول تایپ میکنید تا زمانی که دکمه enter را میزنید میخواند هر چه که در محیط کنسول تایپ میشود از نوع رشته است برای تبدیل نوع رشته به انواع دیگر میتوانید از کلاس `convert` و متدهای آن استفاده کنید به برنامه زیر توجه کنید : ```c# using System; public class Program { public static void Main() { string name

Use Quizgecko on...
Browser
Browser