पायथन बिटवाइज़ ऑपरेटर (तार्किक उत्पाद, तार्किक या, अनन्य या, उलटा, शिफ्ट)

व्यापार

पायथन निम्नलिखित बिटवाइज़ ऑपरेटर्स प्रदान करता है, जो क्रमशः बाइनरी इंटीजर टाइप इंट वैल्यू के प्रत्येक बिट पर लॉजिकल कॉम्बिनेशन, लॉजिकल डिसजंक्शन, एक्सक्लूसिव डिसजंक्शन, बिटवाइज़ इनवर्जन, लेफ्ट बिट शिफ्ट और राइट बिट शिफ्ट करते हैं।

  • &
  • |
  • ^
  • ~
  • <<
  • >>

इस खंड में, हम सबसे पहले निम्नलिखित की व्याख्या करते हैं।

  • चौराहा(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)
11110
10011
01011
00000

ऋणात्मक पूर्णांकों पर बिटवाइज़ संचालन

जब एक नकारात्मक पूर्णांक पर बिटवाइज़ ऑपरेशन किया जाता है, तो मान को संसाधित किया जाता है जैसे कि इसे दो के पूरक रूप में व्यक्त किया गया हो।

ध्यान दें, हालांकि, यदि आप बिन () या प्रारूप () का उपयोग करके एक नकारात्मक पूर्णांक को बाइनरी स्ट्रिंग में परिवर्तित करते हैं, तो निरपेक्ष मान में दो के पूरक प्रारूप के बजाय एक ऋण चिह्न होगा।

यदि आप दो के पूरक प्रतिनिधित्व के साथ एक स्ट्रिंग प्राप्त करना चाहते हैं, तो 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

दो के पूरक भावों के तार के संदर्भ में सोचना बेहतर है, क्योंकि संख्याओं के संदर्भ में सोचना स्पष्ट नहीं है।

Copied title and URL