पायथन निम्नलिखित बिटवाइज़ ऑपरेटर्स प्रदान करता है, जो क्रमशः बाइनरी इंटीजर टाइप इंट वैल्यू के प्रत्येक बिट पर लॉजिकल कॉम्बिनेशन, लॉजिकल डिसजंक्शन, एक्सक्लूसिव डिसजंक्शन, बिटवाइज़ इनवर्जन, लेफ्ट बिट शिफ्ट और राइट बिट शिफ्ट करते हैं।
&
|
^
~
<<
>>
इस खंड में, हम सबसे पहले निम्नलिखित की व्याख्या करते हैं।
- चौराहा(AND) :
&
- अलगाव(OR) :
|
- EXCLUSIVE-OR ऑपरेशन(XOR) :
^
आगे, हम निम्नलिखित पर चर्चा करेंगे।
- ऋणात्मक पूर्णांकों पर बिटवाइज़ संचालन
- थोड़ा फ्लिप( NOT) :
~
- थोड़ा बदलाव:
<<
,>>
बाइनरी, ऑक्टल और हेक्साडेसिमल में पूर्णांक कैसे लिखें, और निम्न फ़ंक्शन का उपयोग करके बाइनरी, ऑक्टल और हेक्साडेसिमल संख्याओं और स्ट्रिंग्स को कैसे परिवर्तित करें, इस बारे में अधिक जानकारी के लिए, निम्न आलेख देखें।
bin()
oct()
hex()
format()
- संबंधित आलेख:पायथन में बाइनरी, ऑक्टल और हेक्साडेसिमल नंबरों और स्ट्रिंग्स को एक दूसरे से कन्वर्ट करें
साथ ही, बिटवाइज़ ऑपरेशंस के बजाय बूलियन मानों (सही, गलत) पर लॉजिकल ऑपरेशंस (बूलियन ऑपरेशंस) के लिए, निम्न आलेख देखें। उपयोग करें और, या के बजाय &,|।
चौराहा(AND) :&ऑपरेटर
यह तार्किक का एक उदाहरण है और & ऑपरेटर, बिन () द्वारा बाइनरी नोटेशन में एक स्ट्रिंग में परिवर्तित परिणाम के साथ।
x = 9 # 0b1001 y = 10 # 0b1010 print(x & y) print(bin(x & y)) # 8 # 0b1000
अलगाव(OR) :|ऑपरेटर
| . का उपयोग करते हुए तार्किक उत्पाद (OR) का एक उदाहरण ऑपरेटर, बिन () और आउटपुट द्वारा एक साथ बाइनरी नोटेशन में एक स्ट्रिंग में परिवर्तित परिणाम के साथ।
print(x | y) print(bin(x | y)) # 11 # 0b1011
EXCLUSIVE-OR ऑपरेशन(XOR) :^ऑपरेटर
^ ऑपरेटर का उपयोग करते हुए एक तार्किक उत्पाद (XOR) का उदाहरण, बिन () का उपयोग करके बाइनरी नोटेशन में एक स्ट्रिंग में रूपांतरण के परिणाम के साथ संयुक्त।
print(x ^ y) print(bin(x ^ y)) # 3 # 0b11
तार्किक AND, OR, और XOR के प्रत्येक बिट के लिए इनपुट और आउटपुट के बीच संबंध नीचे दी गई तालिका में दिखाया गया है।
इनपुट 1 | इनपुट 2 | चौराहा(AND) | अलगाव(OR) | EXCLUSIVE-OR ऑपरेशन(XOR) |
---|---|---|---|---|
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
0 | 1 | 0 | 1 | 1 |
0 | 0 | 0 | 0 | 0 |
ऋणात्मक पूर्णांकों पर बिटवाइज़ संचालन
जब एक नकारात्मक पूर्णांक पर बिटवाइज़ ऑपरेशन किया जाता है, तो मान को संसाधित किया जाता है जैसे कि इसे दो के पूरक रूप में व्यक्त किया गया हो।
ध्यान दें, हालांकि, यदि आप बिन () या प्रारूप () का उपयोग करके एक नकारात्मक पूर्णांक को बाइनरी स्ट्रिंग में परिवर्तित करते हैं, तो निरपेक्ष मान में दो के पूरक प्रारूप के बजाय एक ऋण चिह्न होगा।
यदि आप दो के पूरक प्रतिनिधित्व के साथ एक स्ट्रिंग प्राप्त करना चाहते हैं, तो 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
- संबंधित आलेख:पायथन में बाइनरी, ऑक्टल और हेक्साडेसिमल नंबरों और स्ट्रिंग्स को एक दूसरे से कन्वर्ट करें
थोड़ा फ्लिप:~ऑपरेटर
~ ऑपरेटरों के साथ बिट फ़्लिपिंग का उदाहरण।
बिटवाइज़ इनवर्जन केवल उल्टे प्रत्येक बिट का मान नहीं है। इस ऑपरेटर का उपयोग करते समय वापसी मूल्य इस प्रकार है।~x
#ERROR!-(x+1)
-(x+1)
यह मान इनपुट मान x को दो के पूरक रूप के रूप में मानने और सभी बिट्स को बदलने के बराबर है।
जैसा कि ऊपर उल्लेख किया गया है, पायथन में, जब एक ऋणात्मक पूर्णांक को बिन (), प्रारूप (), आदि का उपयोग करके बाइनरी स्ट्रिंग में परिवर्तित किया जाता है, तो यह दो के पूरक रूप में नहीं होता है, बल्कि ऋण चिह्न के साथ पूर्ण मान में होता है। इसलिए, ~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
दो के पूरक भावों के तार के संदर्भ में सोचना बेहतर है, क्योंकि संख्याओं के संदर्भ में सोचना स्पष्ट नहीं है।