عوامل التشغيل الثنائية في Python

عوامل التشغيل الثنائية في Python تستخدم لأداء الحسابات الثنائية على الأعداد الصحيحة. يتم تحويل الأعداد الصحيحة إلى تنسيق ثنائي ثم يتم أداء العمليات بت بت، ومن هنا جاءت تسمية عوامل التشغيل الثنائية. تعمل عوامل التشغيل الثنائية في Python على الأعداد الصحيحة فقط ويتم إرجاع الناتج النهائي بتنسيق عشري. يُطلق أيضًا على عوامل التشغيل الثنائية في Python اسم “العوامل التشغيل الثنائية”.

عوامل التشغيل الثنائية في Python

هناك 6 عوامل تشغيل ثنائية في Python. يقدم الجدول أدناه تفاصيل مختصرة حولها.

Bitwise Operator Description Simple Example
& Bitwise AND Operator 10 & 7 = 2
Bitwise OR Operator
^ Bitwise XOR Operator 10 ^ 7 = 13
~ Bitwise Ones’ Compliment Operator ~10 = -11
<< Bitwise Left Shift operator 10<<2 = 40
>> Bitwise Right Shift Operator 10>>1 = 5

دعنا نلقي نظرة على هذه العوامل تلو الأخرى ونفهم كيفية عملها.

1. عامل التشغيل الثنائي “و”

يُرجع عامل التشغيل الثنائي “و” في Python القيمة 1 إذا كانت كلتا البتات تساوي 1، وإلا فإنه يُرجع القيمة 0.

>>> 10&7
2
>>> 
Python Bitwise And Operator

2. عامل التشغيل الثنائي “أو”

يُرجع عامل التشغيل الثنائي “أو” في Python القيمة 1 إذا كان أيًا من البتات يساوي 1. إذا كانت كلتا البتات تساويان 0، فإنه يُرجع القيمة 0.

>>> 10|7
15
>>> 
Python Bitwise Or Operator

3. المشغل XOR الثنائي

يُرجى العلم أن المشغل XOR الثنائي في Python يُرجع قيمة 1 إذا كان أحد البتات هو 0 والبت الآخر هو 1. إذا كانت كل البتات 0 أو 1، يُرجع الناتج 0.

>>> 10^7
13
>>> 
Python Bitwise XOR Operator

4. المشغل للتكميل الثنائي

تكميل العدد ‘A’ في Python يكون مساويًا لـ -(A+1).

>>> ~10
-11
>>> ~-10
9
>>> 
Python Bitwise Ones Complement Operator

5. المشغل للتحريك لليسار بشكل ثنائي

يُقوم مشغل التحريك لليسار في Python بنقل بتات العامل الأيسر نحو الجهة اليسرى لعدد محدد من المرات المحددة في العامل الأيمن. ببساطة، يتم إضافة أصفار إلى نهاية الرقم الثنائي.

>>> 10 << 2
40
>>> 
Python Bitwise Left Shift Operator

6. المشغل للتحريك لليمين بشكل ثنائي

تشير عامل الانزلاق اليميني في Python تمامًا إلى العكس التام لعامل الانزلاق اليساري. ثم يتم نقل بتات العاملة من الجهة اليسرى نحو الجهة اليمنى لعدد معين من المرات. بمعنى بسيط، يتم إزالة بتات الجهة اليمنى.

>>> 10 >> 2
2
>>>  
Python Bitwise Right Shift Operator

تكنولوجيا تشغيل عوامل Python

تدعم Python تكنولوجيا تشغيل عوامل الحمل الزائد. هناك طرق متعددة يمكننا من خلالها تنفيذ دعم لعوامل الحمل الزائد لعوامل البتات بالنسبة لكائناتنا المخصصة.

Bitwise Operator Method to Implement
& __and__(self, other)
^ __xor__(self, other)
~ __invert__(self)
<< __lshift__(self, other)
>> __rshift__(self, other)

فيما يلي مثال على دعم تكنولوجيا تشغيل عوامل البتات لكائن مخصص.

class Data:
    id = 0

    def __init__(self, i):
        self.id = i

    def __and__(self, other):
        print('Bitwise AND operator overloaded')
        if isinstance(other, Data):
            return Data(self.id & other.id)
        else:
            raise ValueError('Argument must be object of Data')

    def __or__(self, other):
        print('Bitwise OR operator overloaded')
        if isinstance(other, Data):
            return Data(self.id | other.id)
        else:
            raise ValueError('Argument must be object of Data')

    def __xor__(self, other):
        print('Bitwise XOR operator overloaded')
        if isinstance(other, Data):
            return Data(self.id ^ other.id)
        else:
            raise ValueError('Argument must be object of Data')

    def __lshift__(self, other):
        print('Bitwise Left Shift operator overloaded')
        if isinstance(other, int):
            return Data(self.id << other)
        else:
            raise ValueError('Argument must be integer')

    def __rshift__(self, other):
        print('Bitwise Right Shift operator overloaded')
        if isinstance(other, int):
            return Data(self.id >> other)
        else:
            raise ValueError('Argument must be integer')

    def __invert__(self):
        print('Bitwise Ones Complement operator overloaded')
        return Data(~self.id)

    def __str__(self):
        return f'Data[{self.id}]'


d1 = Data(10)
d2 = Data(7)

print(f'd1&d2 = {d1&d2}')
print(f'd1|d2 = {d1|d2}')
print(f'd1^d2 = {d1^d2}')
print(f'd1<<2 = {d1<<2}')
print(f'd1>>2 = {d1>>2}')
print(f'~d1 = {~d1}')

الناتج:

Bitwise AND operator overloaded
d1&d2 = Data[2]
Bitwise OR operator overloaded
d1|d2 = Data[15]
Bitwise XOR operator overloaded
d1^d2 = Data[13]
Bitwise Left Shift operator overloaded
d1<<2 = Data[40]
Bitwise Right Shift operator overloaded
d1>>2 = Data[2]
Bitwise Ones Complement operator overloaded
~d1 = Data[-11]

إذا كنت غير ملم بتنسيق السلسلة الجديدة، يرجى قراءة f-strings في Python.

الملخص

عوامل البتات في Python تُستخدم في الغالب في الحسابات الرياضية. يمكننا تنفيذ طرق محددة لدعم عوامل البتات لتنفيذات فئة مخصصة لدينا أيضًا.

Source:
https://www.digitalocean.com/community/tutorials/python-bitwise-operators