عملگرهای بیتی در سی شارپ
در جدول زیر عملگرهای بیتی در سی شارپ را مشاهده می کنید. فرض کنید متغیر A مقدار ۶۰ و متغیر B مقدار ۱۳ در خود ذخیره کرده است.
عملگر | توضیحات | مثال |
& | اگر هر دو عملوند true باشند، یک بیت در نتیجه کپی می کند. | (A & B) = 12 که برابر است با ۰۰۰۰ ۱۱۰۰ |
| | اگر یکی از عملوندها true باشند، یک بیت در نتیجه کپی می کند. | (A | B) = 61 که برابر است با ۰۰۱۱ ۱۱۰۱ |
^ | اگر مقدار هر دو عملوند یکسان نباشد (یعنی هر دو true یا هر دو false نباشند)، یک بیت در نتیجه کپی می کند. | (A ^ B) = 41که برابر است با ۰۰۱۱ ۰۰۰۱ |
~ | عملگر یکانی نقیض می باشد و کارش این است که هر جا ۱ بود ۰ و هر جا ۰ بود ۱ می گذارد. | (~A ) = 61 که برابر است با ۱۱۰۰ ۰۰۱۱ |
>> | مقدار عملوند چپ را به مقدار بیت های تعیین شده در عملوند راست، به چپ شیفت می دهد. | A << 2 = 240 که برابر است با ۱۱۱۱ ۰۰۰۰ |
>> | مقدار عملوند چپ را به مقدار بیت های تعیین شده در عملوند راست، به راست شیفت می دهد. | A >> 2 = 15 که برابر است با ۰۰۰۰ ۱۱۱۱ |
از عملگرهای بیتی برای دستکاری بیت ها استفاده می شود. در زیر جدول درستی را برای عملگر های &، | ، ~ و ^ مشاهده می کنید.
p | q | p & q | p | q | p ^ q | ~p |
۰ | ۰ | ۰ | ۰ | ۰ | ۱ |
۰ | ۱ | ۰ | ۱ | ۱ | ۱ |
۱ | ۱ | ۱ | ۱ | ۰ | ۰ |
۱ | ۰ | ۰ | ۱ | ۱ | ۰ |
فرض کنید A = 60 و B = 13 باشد، آنگاه فرمت باینری آن ها به صورت زیر خواهد بود:
1 2 3 4 5 6 7 | A = 0011 1100 B = 0000 1101 ------------------- A&B = 0000 1100 A|B = 0011 1101 A^B = 0011 0001 ~A = 1100 0011 |
عملگر & (AND بیتی)
در عملگر & اگر مقدار هر دو عملوند برابر 1 باشد نتیجه 1 و اگر برابر 1 نباشند نتیجه 0 را بر می گرداند.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 | using System; namespace OperatorsAppl { class Program { static void Main(string[] args) { int a = 60; /* 60 = 0011 1100 */ int b = 13; /* 13 = 0000 1101 */ int c = 0; c = a & b; /* 12 = 0000 1100 */ Console.WriteLine("Value of c is {0}", c ); Console.ReadLine(); } } } |
بعد از اجرای دستورات بالا توسط کامپایلر سی شارپ خروجی زیر بدست خواهد آمد.
1 | Value of c is 12 |
عملگر | (OR بیتی)
در عملگر | اگر مقدار یکی از عملوندها برابر 1 باشد نتیجه 1 و اگر مقدار هر دو عملوندها 0 باشد نتیجه 0 را بر می گرداند.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 | using System; namespace OperatorsAppl { class Program { static void Main(string[] args) { int a = 60; /* 60 = 0011 1100 */ int b = 13; /* 13 = 0000 1101 */ int c = 0; c = a | b; /* 61 = 0011 1101 */ Console.WriteLine("Value of c is {0}", c); Console.ReadLine(); } } } |
بعد از اجرای دستورات بالا توسط کامپایلر زبان سی شارپ خروجی زیر بدست خواهد آمد.
1 | Value of c is 61 |
عملگر ^ (XOR بیتی)
در عملگر ^ اگر مقدار عملوندها با یکدیگر فرق داشته باشد مقدار 1 و اگر مقدار عملوندها با هم برابر باشند مقدار 0 را بر می گرداند.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 | using System; namespace OperatorsAppl { class Program { static void Main(string[] args) { int a = 60; /* 60 = 0011 1100 */ int b = 13; /* 13 = 0000 1101 */ int c = 0; c = a ^ b; /* 49 = 0011 0001 */ Console.WriteLine("Value of c is {0}", c); Console.ReadLine(); } } } |
بعد از اجرای دستورات بالا توسط کامپایلر زبان سی شارپ خروجی زیر بدست خواهد آمد.
1 | Value of c is 49 |
عملگر ~ (NOT بیتی)
در عملگر ~ اگر مقدار عملوند برابر 1 باشد نتیجه 0 و اگر مقدار عملوند 0 باشد نتیجه 1 را بر می گرداند.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 | using System; namespace OperatorsAppl { class Program { static void Main(string[] args) { int a = 60; /* 60 = 0011 1100 */ int b = 13; /* 13 = 0000 1101 */ int c = 0; c = ~a; /*-61 = 1100 0011 */ Console.WriteLine("Value of c is {0}", c); Console.ReadLine(); } } } |
بعد از اجرای دستورات بالا توسط کامپایلر زبان سی شارپ خروجی زیر بدست خواهد آمد.
1 | Value of c is -61 |
عملگر << (شیفت به چپ بیتی)
در عملگر << بیت های مقدار عملوند را به تعداد تعیین شده به سمت چپ شیف داده و از سمت راست به جای مقدار های شیفت داده شده بیت 0 قرار می دهد.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 | using System; namespace OperatorsAppl { class Program { static void Main(string[] args) { int a = 60; /* 60 = 0011 1100 */ int b = 13; /* 13 = 0000 1101 */ int c = 0; c = a << 2; /* 240 = 1111 0000 */ Console.WriteLine("Value of c is {0}", c); Console.ReadLine(); } } } |
بعد از اجرای دستورات بالا توسط کامپایلر زبان سی شارپ خروجی زیر بدست خواهد آمد.
1 | Value of c is 240 |
عملگر >> (شیفت به راست بیتی)
در عملگر >> بیت های مقدار عملوند را به تعداد تعیین شده به سمت راست شیف داده و از سمت چپ به جای مقدار های شیفت داده شده بیت 0 قرار می دهد.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 | using System; namespace OperatorsAppl { class Program { static void Main(string[] args) { int a = 60; /* 60 = 0011 1100 */ int b = 13; /* 13 = 0000 1101 */ int c = 0; c = a >> 2; /* 15 = 0000 1111 */ Console.WriteLine("Value of c is {0}", c); Console.ReadLine(); } } } |
بعد از اجرای دستورات بالا توسط کامپایلر زبان سی شارپ خروجی زیر بدست خواهد آمد.
1 | Value of c is 15 |
هیچ نظری ثبت نشده است