पाइथन बिटवाइज अपरेटरहरू (तार्किक उत्पादन, तार्किक वा, विशेष वा, उल्टो, शिफ्ट)

व्यापार

पाइथनले निम्न बिटवाइज अपरेटरहरू प्रदान गर्दछ, जसले क्रमशः बाइनरी इन्टिजर प्रकारको int मानको प्रत्येक बिटमा तार्किक संयोजन, तार्किक विच्छेदन, विशेष विच्छेदन, बिटवाइज इन्भर्सन, बायाँ बिट सिफ्ट र दायाँ बिट सिफ्ट कार्य गर्दछ।

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

यस खण्डमा, हामी पहिले निम्न व्याख्या गर्छौं।

  • प्रतिच्छेदन(AND) :&
  • विच्छेदन(OR) :|
  • EXCLUSIVE- वा सञ्चालन(XOR) :^

अर्को, हामी निम्न छलफल गर्नेछौं।

  • नकारात्मक पूर्णांकहरूमा बिटवाइज सञ्चालन
  • बिट फ्लिप( NOT) :~
  • बिट शिफ्ट:<<,>>

बाइनरी, अक्टल, र हेक्साडेसिमलमा पूर्णाङ्कहरू कसरी लेख्ने, र निम्न प्रकार्यहरू प्रयोग गरेर बाइनरी, अक्टल, र हेक्साडेसिमल संख्याहरू र स्ट्रिङहरूलाई कसरी रूपान्तरण गर्ने भन्ने ’bout थप जानकारीको लागि, निम्न लेख हेर्नुहोस्।

  • bin()
  • oct()
  • hex()
  • format()

साथै, bitwise अपरेसनहरूको सट्टा बुलियन मानहरू (सत्य, गलत) मा तार्किक अपरेसनहरू (बुलियन अपरेशनहरू) को लागि, निम्न लेखलाई सन्दर्भ गर्नुहोस्। प्रयोग गर्नुहोस् र, वा सट्टा &,|।

प्रतिच्छेदन(AND) :&अपरेटर

यो तार्किक र प्रयोग गर्ने एउटा उदाहरण हो & अपरेटर, परिणामलाई 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

EXCLUSIVE- वा सञ्चालन(XOR) :^अपरेटर

^ अपरेटर प्रयोग गरी तार्किक उत्पादन (XOR) को उदाहरण, bin() को प्रयोग गरेर बाइनरी नोटेशनमा स्ट्रिङमा रूपान्तरणको परिणामसँग जोडिएको।

print(x ^ y)
print(bin(x ^ y))
# 3
# 0b11

तार्किक AND, OR, र XOR को प्रत्येक बिटको लागि इनपुट र आउटपुट बीचको सम्बन्ध तलको तालिकामा देखाइएको छ।

इनपुट १इनपुट २प्रतिच्छेदन(AND)विच्छेदन(OR)EXCLUSIVE- वा सञ्चालन(XOR)
11110
10011
01011
00000

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

जब नकारात्मक पूर्णांकमा बिटवाइज अपरेशन गरिन्छ, मानलाई दुईको पूरक फारममा व्यक्त गरिएको जस्तै प्रशोधन गरिन्छ।

नोट गर्नुहोस्, यद्यपि, यदि तपाईंले bin() वा format() प्रयोग गरेर नकारात्मक पूर्णांकलाई बाइनरी स्ट्रिङमा रूपान्तरण गर्नुभयो भने, निरपेक्ष मानमा दुईको पूरक ढाँचाको सट्टा माइनस चिन्ह हुनेछ।

यदि तपाइँ दुईको पूरक प्रतिनिधित्वको साथ स्ट्रिङ प्राप्त गर्न चाहनुहुन्छ भने, तल देखाइए अनुसार आवश्यक बिट अंकहरूको अधिकतम संख्याको साथ 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 लाई दुईको पूरक फारमको रूपमा विचार गर्न र सबै बिटहरूलाई उल्टो गर्ने बराबर छ।

माथि उल्लेख गरिए अनुसार, पाइथनमा, जब ऋणात्मक पूर्णांकलाई bin(), format(), आदि प्रयोग गरेर बाइनरी स्ट्रिङमा रूपान्तरण गरिन्छ, यो दुईको पूरक फारममा हुँदैन, तर माइनस चिन्हको साथ निरपेक्ष मानमा हुन्छ। त्यसैले, ~x लाई सीधै स्ट्रिङमा रूपान्तरण गर्दा मूल मानको बिटहरू उल्टो भएको स्ट्रिङमा परिणत हुँदैन।

x = 9  # 0b1001

print(~x)
print(bin(~x))
# -10
# -0b1010

जब हामीले AND सञ्चालन गर्छौं र यसलाई दुईको पूरक प्रतिनिधित्वको स्ट्रिङमा परिणत गर्छौं, हामी देख्न सक्छौं कि मूल मानका बिटहरू उल्टो छन्।

थप रूपमा, उदाहरणका लागि, 4-अङ्कको बिट स्ट्रिङ उल्टो (साइन बिट हटाइएको) जस्तै बिट स्ट्रिङ प्राप्त गर्न, निम्नानुसार ANDed मानका लागि शून्यहरू भर्न format() प्रयोग गर्नुहोस्।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