عملگرهای بیتی در زبان 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 بیتی)
در عملگر & اگر مقدار هر دو عملوند برابر ۱ باشد نتیجه ۱ و اگر برابر ۱ نباشند نتیجه ۰ را بر می گرداند.
مثال:
1 2 3 4 5 6 7 8 9 10 | #include <iostream> using namespace std; 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 */ cout << "Value of c is : " << c << endl ; return 0; } |
بعد از اجرای دستورات بالا توسط کامپایلر زبان C++ خروجی زیر بدست خواهد آمد:
1 | Value of c is 12 |
عملگر | (OR بیتی)
در عملگر | اگر مقدار یکی از عملوندها برابر ۱ باشد نتیجه ۱ و اگر مقدار هر دو عملوندها ۰ باشد نتیجه ۰ را بر می گرداند.
مثال:
1 2 3 4 5 6 7 8 9 | #include <iostream> using namespace std; 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 */ cout << "Value of c is : " << c << endl ; return 0; } |
بعد از اجرای دستورات بالا توسط کامپایلر زبان C++ خروجی زیر بدست خواهد آمد:
1 | Value of c is 61 |
عملگر ^ (XOR بیتی)
در عملگر ^ اگر مقدار عملوندها با یکدیگر فرق داشته باشد مقدار ۱ و اگر مقدار عملوندها با هم برابر باشند مقدار ۰ را بر می گرداند.
مثال:
1 2 3 4 5 6 7 8 9 | #include <iostream> using namespace std; 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 */ cout << "Value of c is : " << c << endl ; return 0; } |
بعد از اجرای دستورات بالا توسط کامپایلر زبان C++ خروجی زیر بدست خواهد آمد:
1 | Value of c is 49 |
عملگر ~ (NOT بیتی)
در عملگر ~ اگر مقدار عملوند برابر ۱ باشد نتیجه ۰ و اگر مقدار عملوند ۰ باشد نتیجه ۱ را بر می گرداند.
مثال:
1 2 3 4 5 6 7 8 9 10 | #include <iostream> using namespace std; int main() { unsigned int a = 60; /* 60 = 0011 1100 */ unsigned int b = 13; /* 13 = 0000 1101 */ int c = 0; c = ~a; /*-61 = 1100 0011 */ cout << "Value of c is : " << c << endl ; return 0; } |
بعد از اجرای دستورات بالا توسط کامپایلر زبان C++ خروجی زیر بدست خواهد آمد:
1 | Value of c is -61 |
عملگر << (شیفت به چپ بیتی)
در عملگر << بیت های مقدار عملوند را به تعداد تعیین شده به سمت چپ شیف داده و از سمت راست به جای مقدار های شیفت داده شده بیت ۰ قرار می دهد.
مثال:
1 2 3 4 5 6 7 8 9 | #include <iostream> using namespace std; 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 */ cout << "Value of c is : " << c << endl ; return 0; } |
بعد از اجرای دستورات بالا توسط کامپایلر زبان C++ خروجی زیر بدست خواهد آمد:
1 | Value of c is 240 |
عملگر >> (شیفت به راست بیتی)
در عملگر >> بیت های مقدار عملوند را به تعداد تعیین شده به سمت راست شیف داده و از سمت چپ به جای مقدار های شیفت داده شده بیت ۰ قرار می دهد.
مثال:
1 2 3 4 5 6 7 8 9 | #include <iostream> using namespace std; 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 */ cout << "Value of c is : " << c << endl ; return 0; } |
بعد از اجرای دستورات بالا توسط کامپایلر زبان C++ خروجی زیر بدست خواهد آمد:
1 | Value of c is 15 |
هیچ نظری ثبت نشده است