توفر Python عوامل تشغيل البت التالية ، والتي تقوم بتنفيذ الاقتران المنطقي ، والفصل المنطقي ، والفصل الحصري ، وانعكاس البتات ، وإزاحة البت الأيسر ، وإزاحة البت الأيمن على كل بت من نوع عدد صحيح ثنائي القيمة int ، على التوالي.
&
|
^
~
<<
>>
في هذا القسم ، نشرح أولاً ما يلي.
- تداخل(AND) :
&
- انفصال(OR) :
|
- عملية حصرية أو(XOR) :
^
بعد ذلك ، سنناقش ما يلي.
- عمليات البت على الأعداد الصحيحة السالبة
- قليلا الوجه( NOT) :
~
- تحول قليلا:
<<
و>>
لمزيد من المعلومات حول كيفية كتابة الأعداد الصحيحة بالثنائي والثماني والست عشري ، وكيفية تحويل الأرقام والسلاسل الثنائية والثنائية والسداسية العشرية باستخدام الوظائف التالية ، راجع المقالة التالية.
bin()
oct()
hex()
format()
- مقالات ذات صلة:قم بتحويل الأرقام والسلاسل الثنائية والثنائية والسداسية العشرية من وإلى بعضها البعض في Python
أيضًا ، بالنسبة للعمليات المنطقية (العمليات المنطقية) على القيم المنطقية (صواب ، خطأ) بدلاً من العمليات الأحادية ، يرجى الرجوع إلى المقالة التالية. استخدم و ، أو بدلاً من & amp؛ ، |.
تداخل(AND) :&المشغل أو العامل
هذا مثال على منطقي AND باستخدام & amp؛ عامل التشغيل ، مع تحويل النتيجة إلى سلسلة في تدوين ثنائي بواسطة bin ().
x = 9 # 0b1001 y = 10 # 0b1010 print(x & y) print(bin(x & y)) # 8 # 0b1000
انفصال(OR) :|المشغل أو العامل
مثال على منتج منطقي (OR) يستخدم | عامل التشغيل ، مع تحويل النتيجة إلى سلسلة في تدوين ثنائي بواسطة bin () والإخراج معًا.
print(x | y) print(bin(x | y)) # 11 # 0b1011
عملية حصرية أو(XOR) :^المشغل أو العامل
مثال على منتج منطقي (XOR) يستخدم عامل التشغيل ^ ، مقترنًا بنتيجة التحويل إلى سلسلة في تدوين ثنائي باستخدام bin ().
print(x ^ y) print(bin(x ^ y)) # 3 # 0b11
العلاقة بين المدخلات والمخرجات لكل بت منطقي AND و OR و XOR موضحة في الجدول أدناه.
المدخلات 1 | المدخلات 2 | تداخل(AND) | انفصال(OR) | عملية حصرية أو(XOR) |
---|---|---|---|---|
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
0 | 1 | 0 | 1 | 1 |
0 | 0 | 0 | 0 | 0 |
عمليات البت على الأعداد الصحيحة السالبة
عندما يتم تنفيذ عملية بت على عدد صحيح سالب ، تتم معالجة القيمة كما لو تم التعبير عنها في شكل مكمل اثنين.
لاحظ ، مع ذلك ، أنه إذا قمت بتحويل عدد صحيح سالب إلى سلسلة ثنائية باستخدام bin () أو تنسيق () ، فإن القيمة المطلقة سيكون لها علامة ناقص بدلاً من تنسيق مكمل اثنين.
إذا كنت ترغب في الحصول على سلسلة بتمثيل مكمل لاثنين ، فاخذ AND مع الحد الأقصى لعدد أرقام البت المطلوبة ، كما هو موضح أدناه.
- لـ 4 بت
0b1111
(=0xf
) - لـ 8 بت
0xff
- لـ 16 بت
0xffff
يمكنك الحصول على سلسلة من تمثيل مكملين اثنين (كل بت مقلوب ويضاف 1).
x = -9 print(x) print(bin(x)) # -9 # -0b1001 print(bin(x & 0xff)) print(format(x & 0xffff, 'x')) # 0b11110111 # fff7
- مقالات ذات صلة:قم بتحويل الأرقام والسلاسل الثنائية والثنائية والسداسية العشرية من وإلى بعضها البعض في Python
قليلا الوجه:~المشغل أو العامل
~ مثال لقلب البت مع المشغلين.
انعكاس Bitwise ليس مجرد قيمة كل بت مقلوب. القيمة المعادة عند استخدام هذا العامل هي كما يلي.~x
#ERROR!-(x+1)
-(x+1)
هذه القيمة تعادل اعتبار قيمة الإدخال x كشكل مكمل لاثنين وعكس كل البتات.
كما هو مذكور أعلاه ، في Python ، عندما يتم تحويل عدد صحيح سالب إلى سلسلة ثنائية باستخدام bin () ، التنسيق () ، وما إلى ذلك ، فإنه ليس في شكل مكمل اثنين ، ولكن في القيمة المطلقة مع علامة الطرح. لذلك ، فإن تحويل ~ x مباشرة إلى سلسلة لن ينتج عنه سلسلة مع بتات القيمة الأصلية المقلوبة.
x = 9 # 0b1001 print(~x) print(bin(~x)) # -10 # -0b1010
عندما نجري العملية AND ونحولها إلى سلسلة من تمثيل مكملين اثنين ، يمكننا أن نرى أن بتات القيمة الأصلية مقلوبة.
بالإضافة إلى ذلك ، على سبيل المثال ، للحصول على سلسلة بت عبارة عن سلسلة بت مكونة من 4 أرقام مقلوبة كما هي (تم حذف بت الإشارة) ، استخدم التنسيق () لملء الأصفار للقيمة ANDed على النحو التالي04b'
print(bin(~x & 0xff)) print(format(~x & 0b1111, '04b')) # 0b11110110 # 0110
تحول قليلا:<<و>>
أمثلة على إزاحة البت الأيسر وإزاحة البت الأيمن باستخدام عوامل إزاحة البت.
x = 9 # 0b1001 print(x << 1) print(bin(x << 1)) # 18 # 0b10010 print(x >> 1) print(bin(x >> 1)) # 4 # 0b100
للقيم السالبة ، يتم تمديد بت الإشارة وإزاحته ، وتظل الإشارة الموجبة / السالبة كما هي. القيمة السالبة هي صورة لخط من 1s على طول الطريق إلى اليسار.
x = -9 print(bin(x)) print(bin(x & 0xff)) # -0b1001 # 0b11110111 print(x << 1) print(bin(x << 1)) print(bin((x << 1) & 0xff)) # -18 # -0b10010 # 0b11101110 print(x >> 1) print(bin(x >> 1)) print(bin((x >> 1) & 0xff)) # -5 # -0b101 # 0b11111011
من الأفضل التفكير من منظور سلاسل من التعبيرات التكميلية لاثنين ، لأن التفكير من حيث الأرقام ليس واضحًا.