عملگرهای بیتی در زبان C
از عملگرهای بیتی برای دستکاری بیت ها در زبان C استفاده می شود. در زیر عملگرهای بیتی در زبان C را مشاهده می کنید.
عملگر | توضیحات | مثال |
& | اگر هر دو عملوند 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 |
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
فرض کنید 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 بیتی)
در عملگر & در زبان C اگر مقدار هر دو عملوند برابر ۱ باشد نتیجه ۱ و اگر برابر ۱ نباشند نتیجه ۰ را بر می گرداند.
مثال:
1 2 3 4 5 6 7 8 9 | #include <stdio.h> int main() { unsigned int a = 60; /* 60 = 0011 1100 */ unsigned int b = 13; /* 13 = 0000 1101 */ int c = 0; c = a & b; /* 12 = 0000 1100 */ printf("Value of c is %dn", c ); return 0; } |
بعد از اجرای کد بالا توسط کامپایلر زبان C خروجی زیر را مشاهده خواهید کرد.
1 | Value of c is 12 |
عملگر | (OR بیتی)
در عملگر | در زبان C اگر مقدار یکی از عملوندها برابر ۱ باشد نتیجه ۱ و اگر مقدار هر دو عملوندها ۰ باشد نتیجه ۰ را بر می گرداند.
مثال:
1 2 3 4 5 6 7 8 9 | #include <stdio.h> int main() { unsigned int a = 60; /* 60 = 0011 1100 */ unsigned int b = 13; /* 13 = 0000 1101 */ int c = 0; c = a | b; /* 61 = 0011 1101 */ printf("Value of c is %dn", c ); return 0; } |
بعد از اجرای کد بالا توسط کامپایلر زبان C خروجی زیر را مشاهده خواهید کرد.
1 | Value of c is 61 |
عملگر ^ (XOR بیتی)
در عملگر ^ در زبان C اگر مقدار عملوندها با یکدیگر فرق داشته باشد مقدار ۱ و اگر مقدار عملوندها با هم برابر باشند مقدار ۰ را بر می گرداند.
مثال:
1 2 3 4 5 6 7 8 9 | #include <stdio.h> int main() { unsigned int a = 60; /* 60 = 0011 1100 */ unsigned int b = 13; /* 13 = 0000 1101 */ int c = 0; c = a ^ b; /* 49 = 0011 0001 */ printf("Value of c is %dn", c ); return 0; } |
بعد از اجرای کد بالا توسط کامپایلر زبان C خروجی زیر را مشاهده خواهید کرد.
1 | Value of c is 49 |
عملگر ~ (NOT بیتی)
در عملگر ~ در زبان C اگر مقدار عملوند برابر ۱ باشد نتیجه ۰ و اگر مقدار عملوند ۰ باشد نتیجه ۱ را بر می گرداند.
مثال:
1 2 3 4 5 6 7 8 9 | #include <stdio.h> int main() { unsigned int a = 60; /* 60 = 0011 1100 */ unsigned int b = 13; /* 13 = 0000 1101 */ int c = 0; c = ~a; /*-61 = 1100 0011 */ printf("Line 4 - Value of c is %dn", c ); return 0; } |
بعد از اجرای کد بالا توسط کامپایلر زبان C خروجی زیر را مشاهده خواهید کرد.
1 | Value of c is -61 |
عملگر << (شیفت به چپ بیتی)
در عملگر << در زبان C بیت های مقدار عملوند را به تعداد تعیین شده به سمت چپ شیف داده و از سمت راست به جای مقدار های شیفت داده شده بیت ۰ قرار می دهد.
مثال:
1 2 3 4 5 6 7 8 9 | #include <stdio.h> int main() { unsigned int a = 60; /* 60 = 0011 1100 */ unsigned int b = 13; /* 13 = 0000 1101 */ int c = 0; c = a << 2; /* 240 = 1111 0000 */ printf("Value of c is %dn", c ); return 0; } |
بعد از اجرای کد بالا توسط کامپایلر زبان C خروجی زیر را مشاهده خواهید کرد.
1 | Value of c is 240 |
عملگر >> (شیفت به راست بیتی)
در عملگر >> در زبان C بیت های مقدار عملوند را به تعداد تعیین شده به سمت راست شیف داده و از سمت چپ به جای مقدار های شیفت داده شده بیت ۰ قرار می دهد.
مثال:
1 2 3 4 5 6 7 8 9 | #include <stdio.h> int main() { unsigned int a = 60; /* 60 = 0011 1100 */ unsigned int b = 13; /* 13 = 0000 1101 */ int c = 0; c = a >> 2; /* 15 = 0000 1111 */ printf("Value of c is %dn", c ); return 0; } |
بعد از اجرای کد بالا توسط کامپایلر زبان C خروجی زیر را مشاهده خواهید کرد.
1 | Value of c is 15 |
اصلا چطور میشه فرمتشون رو درک کرد باید قبل از اینها باینری و اسمبلی خوند؟