عملگرهای بیتی در پایتون
از عملگرهای بیتی در پایتون برای دستکاری بیت ها استفاده می شود. فرض کنید 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 |
در جدول زیر عملگرهای بیتی پشتیبانی شده در زبان پایتون را مشاهده می کنید:
عملگر | توضیحات | مثال |
& Binary AND | اگر هر دو عملوند true باشند، یک بیت در نتیجه کپی می کند. | (a & b) معادل 0000 1100 |
| Binary OR | اگر یکی از عملوندها true باشند، یک بیت در نتیجه کپی می کند. | (a | b) = 61 معادل 0011 1101 |
^ Binary XOR | اگر مقدار هر دو عملوند یکسان نباشد (یعنی هر دو true یا هر دو false نباشند)، یک بیت در نتیجه کپی می کند. | (a ^ b) = 49 معادل 0011 0001 |
~ Binary Ones Complement | عملگر یکانی نقیض می باشد و کارش این است که هر جا 1 بود 0 و هر جا 0 بود 1 می گذارد. | (~a ) = -61 معادل 1100 0011 |
<< Binary Left Shift | مقدار عملوند چپ را به مقدار بیت های تعیین شده در عملوند راست، به چپ شیفت می دهد. | a << 2 = 240 معادل 1111 0000 |
>> Binary Right Shift | مقدار عملوند چپ را به مقدار بیت های تعیین شده در عملوند راست، به راست شیفت می دهد. | a >> 2 = 15 معادل 0000 1111 |
عملگر & (AND بیتی)
در عملگر & اگر مقدار هر دو عملوند برابر ۱ باشد نتیجه ۱ و اگر برابر ۱ نباشند نتیجه ۰ را بر می گرداند.
مثال:
1 2 3 4 5 6 | #!/usr/bin/python a = 60 # 60 = 0011 1100 b = 13 # 13 = 0000 1101 c = 0 c = a & b; # 12 = 0000 1100 print "Value of c is ", c |
خروجی:
1 | Value of c is 12 |
عملگر | (OR بیتی)
در عملگر | اگر مقدار یکی از عملوندها برابر ۱ باشد نتیجه ۱ و اگر مقدار هر دو عملوندها ۰ باشد نتیجه ۰ را بر می گرداند.
مثال:
1 2 3 4 5 6 | #!/usr/bin/python a = 60 # 60 = 0011 1100 b = 13 # 13 = 0000 1101 c = 0 c = a | b; # 61 = 0011 1101 print "Value of c is ", c |
خروجی:
1 | Value of c is 61 |
عملگر ^ (XOR بیتی)
در عملگر ^ اگر مقدار عملوندها با یکدیگر فرق داشته باشد مقدار ۱ و اگر مقدار عملوندها با هم برابر باشند مقدار ۰ را بر می گرداند.
مثال:
1 2 3 4 5 6 | #!/usr/bin/python a = 60 # 60 = 0011 1100 b = 13 # 13 = 0000 1101 c = 0 c = a ^ b; # 49 = 0011 0001 print "Value of c is ", c |
خروجی:
1 | Value of c is 49 |
عملگر ~ (NOT بیتی)
در عملگر ~ اگر مقدار عملوند برابر ۱ باشد نتیجه ۰ و اگر مقدار عملوند ۰ باشد نتیجه ۱ را بر می گرداند.
مثال:
1 2 3 4 5 6 | #!/usr/bin/python a = 60 # 60 = 0011 1100 b = 13 # 13 = 0000 1101 c = 0 c = ~a; # -61 = 1100 0011 print "Value of c is ", c |
خروجی:
1 | Value of c is -61 |
عملگر << (شیفت به چپ بیتی)
در عملگر << بیت های مقدار عملوند را به تعداد تعیین شده به سمت چپ شیف داده و از سمت راست به جای مقدار های شیفت داده شده بیت ۰ قرار می دهد.
مثال:
1 2 3 4 5 6 | #!/usr/bin/python a = 60 # 60 = 0011 1100 b = 13 # 13 = 0000 1101 c = 0 c = a << 2; # 240 = 1111 0000 print "Value of c is ", c |
خروجی:
1 | Value of c is 240 |
عملگر >> (شیفت به راست بیتی)
در عملگر >> بیت های مقدار عملوند را به تعداد تعیین شده به سمت راست شیف داده و از سمت چپ به جای مقدار های شیفت داده شده بیت ۰ قرار می دهد.
مثال:
1 2 3 4 5 6 | #!/usr/bin/python a = 60 # 60 = 0011 1100 b = 13 # 13 = 0000 1101 c = 0 c = a >> 2; # 15 = 0000 1111 print "Value of c is ", c |
خروجی:
1 | Value of c is 15 |
سلام درباره عملگر ~ اگر a=60 باشه در اینصورت ~a=0b11000011 خواهد بود که برابر با 195 هست پس چرا این رو برابر -61 نشون میده؟؟ چیزی که من راجع به این عملگر دیدم اینه که به اعداد یه دونه اضافه میکنه و بعد اونا رو قرینه میکنه
سلام عملیات بیتی در کل از 8 بیت تشکیل میشه که بخوایم از راست به چپ بیت ها رو نامگذاری کنیم به این شکل میشه: بیت اول 1+ بیت دوم 2+ بیت سوم 4+ بیت چهارم 8+ بیت پنجم 16+ بیت ششم 32+ بیت هفتم 64+ و اما بیت هشتم که مهم ترین نکته همین این قسمته که در چپ ترین بیت دیگه عددمون مثبت نیست و نقش منفی ایفا میکنه و به جای اینکه 128+ باشه 128- خوانده میشه تو اون موردی که به نظر شما 195 میشه شما بیت هشتم هم مثبت در نظر گرفتید (195 = 1 + 2 + 64 + 128) که این کاملا اشتباهه روند محاسباتی صحیح این سوال به صورت مقابل میشه (61 - = 1 + 2 + 64 + 128 -)