खोज…


परिचय

बिटवाइज़ ऑपरेशंस बिट स्तर पर बाइनरी स्ट्रिंग्स को बदलते हैं। ये ऑपरेशन अविश्वसनीय रूप से बुनियादी हैं और प्रोसेसर द्वारा सीधे समर्थित हैं। डिवाइस ड्राइवर, निम्न-स्तरीय ग्राफिक्स, क्रिप्टोग्राफी और नेटवर्क संचार के साथ काम करने में ये कुछ संचालन आवश्यक हैं। यह खंड पायथन के बिटवाइज ऑपरेटरों के उपयोगी ज्ञान और उदाहरण प्रदान करता है।

वाक्य - विन्यास

  • x << y # बिटवाइज़ लेफ्ट शिफ्ट

  • x >> y # बिटवाइज़ राइट शिफ्ट

  • x & y # बिटवाइज़ और

  • x | y # बिटवाइज़ या

  • ~ x # बिटवाइज़ नहीं

  • x ^ y # बिटवाइज़ XOR

बिटवाइज़ और

& ऑपरेटर एक बाइनरी और प्रदर्शन करेगा, जहां दोनों ऑपरेंड में मौजूद होने पर थोड़ा कॉपी किया जाता है। इसका मत:

# 0 & 0 = 0
# 0 & 1 = 0
# 1 & 0 = 0
# 1 & 1 = 1

# 60 = 0b111100
# 30 = 0b011110
60 & 30
# Out: 28
# 28 = 0b11100

bin(60 & 30)
# Out: 0b11100

बिटवार या

| ऑपरेटर एक बाइनरी प्रदर्शन करेगा "या," जहां थोड़ा सा कॉपी किया जाता है यदि यह किसी भी ऑपरेंड में मौजूद है। इसका मत:

# 0 | 0 = 0
# 0 | 1 = 1 
# 1 | 0 = 1
# 1 | 1 = 1

# 60 = 0b111100 
# 30 = 0b011110
60 | 30
# Out: 62
# 62 = 0b111110

bin(60 | 30)
# Out: 0b111110

बिटवाइज़ XOR (विशेष या)

^ ऑपरेटर एक बाइनरी XOR प्रदर्शन करेगा जिसमें एक बाइनरी 1 को कॉपी किया जाता है यदि और केवल अगर यह एक ऑपरेंड का मूल्य है। इसे बताते हुए एक और तरीका यह है कि परिणाम केवल 1 यदि ऑपरेंड अलग हैं। उदाहरणों में शामिल:

# 0 ^ 0 = 0
# 0 ^ 1 = 1
# 1 ^ 0 = 1
# 1 ^ 1 = 0

# 60 = 0b111100
# 30 = 0b011110
60 ^ 30
# Out: 34
# 34 = 0b100010

bin(60 ^ 30)
# Out: 0b100010

बिटवाइस लेफ्ट शिफ्ट

<< ऑपरेटर एक बिटवाइज़ "लेफ्ट शिफ्ट," करेगा, जहाँ लेफ्ट ऑपरेंड की वैल्यू को लेफ्ट ऑपरेंड द्वारा दिए गए बिट्स की संख्या द्वारा ले जाया जाता है।

# 2 = 0b10
2 << 2
# Out: 8
# 8 = 0b1000

bin(2 << 2)
# Out: 0b1000

1 की बाईं बिट पारी का प्रदर्शन 2 से गुणा के बराबर है:

7 << 1
# Out: 14

n की बाईं ओर शिफ्ट करना 2**n से गुणा के बराबर है:

3 << 4
# Out: 48

बिटवाइज़ राइट शिफ्ट

>> ऑपरेटर एक बिटवाइज "राइट शिफ्ट" करेगा, जहां लेफ्ट ऑपरेंड की वैल्यू को राइट ऑपरेंड द्वारा दिए गए बिट्स की संख्या से दाएं ले जाया जाता है।

# 8 = 0b1000
8 >> 2
# Out: 2
# 2 = 0b10

bin(8 >> 2)
# Out: 0b10

की एक सही बिट पारी प्रदर्शन 1 से पूर्णांक विभाजन के बराबर है 2 :

36 >> 1
# Out: 18

15 >> 1
# Out: 7

n की दाईं ओर शिफ्ट करना पूर्णांक विभाजन द्वारा 2**n बराबर है:

48 >> 4
# Out: 3

59 >> 3
# Out: 7

बिटवाइज़ नहीं

~ ऑपरेटर संख्या में सभी बिट्स को फ्लिप करेगा। चूंकि कंप्यूटर हस्ताक्षरित संख्या प्रतिनिधित्व का उपयोग करते हैं - विशेष रूप से, नकारात्मक द्विआधारी संख्याओं को सांकेतिक शब्दों में बदलने के लिए दो का पूरक अंकन जहां नकारात्मक संख्या एक अग्रणी शून्य (0) के बजाय एक अग्रणी (1) के साथ लिखी जाती है।

इसका मतलब है कि यदि आप अपने दो-पूरक संख्याओं का प्रतिनिधित्व करने के लिए 8 बिट्स का उपयोग कर रहे थे, तो आप 0 से 127 तक संख्याओं का प्रतिनिधित्व करने के लिए 0000 0000 से 0111 1111 तक के पैटर्न का इलाज करेंगे और नकारात्मक संख्याओं का प्रतिनिधित्व करने के लिए 1xxx xxxx को आरक्षित करेंगे।

आठ-बिट दो-पूरक संख्या

बिट्स निरुपित मूल्य दो के पूरक मूल्य
0000 0000 0 0
0000 0001 1 1
0000 0010 है 2 2
0111 1110 126 126
0111 1111 127 127
1000 0000 128 -128
1000 0001 129 -127
1000 0010 130 -126
११११ १११० 254 -2
1111 1111 255 -1

संक्षेप में, इसका मतलब यह है कि जबकि 1010 0110 का एक अहस्ताक्षरित मान 166 है (जोड़कर (128 * 1) + (64 * 0) + (32 * 1) + (16 * 0) + (8 * 0) + (4 * 1) + (2 * 1) + (1 * 0) ), इसका -90 का दो-पूरक मान है (जोड़कर आया (128 * 1) - (64 * 0) - (32 * 1) - (16 * 0) - (8 * 0) - (4 * 1) - (2 * 1) - (1 * 0) , और मान के पूरक)।

इस तरह, नकारात्मक संख्या -128 ( 1000 0000 ) तक कम हो जाती है। शून्य (0) को 0000 0000 रूप में और शून्य से एक (-1) को 1111 1111 रूप में दर्शाया गया है।

सामान्य तौर पर, हालांकि, इसका मतलब है ~n = -n - 1

# 0 = 0b0000 0000
~0
# Out: -1
# -1 = 0b1111 1111
    
# 1 = 0b0000 0001
~1
# Out: -2
# -2 = 1111 1110

# 2 = 0b0000 0010
~2
# Out: -3
# -3 = 0b1111 1101

# 123 = 0b0111 1011
~123
# Out: -124
# -124 = 0b1000 0100

ध्यान दें , सकारात्मक संख्याओं पर लागू होने पर इस ऑपरेशन का समग्र प्रभाव संक्षेप में प्रस्तुत किया जा सकता है:

~n -> -|n+1|

और फिर, जब ऋणात्मक संख्याओं पर लागू किया जाता है, तो संबंधित प्रभाव होता है:

~-n -> |n-1|

निम्नलिखित उदाहरण इस अंतिम नियम का वर्णन करते हैं ...

# -0 = 0b0000 0000
~-0
# Out: -1 
# -1 = 0b1111 1111
# 0 is the obvious exception to this rule, as -0 == 0 always
    
# -1 = 0b1000 0001
~-1
# Out: 0
# 0 = 0b0000 0000

# -2 = 0b1111 1110
~-2
# Out: 1
# 1 = 0b0000 0001

# -123 = 0b1111 1011
~-123
# Out: 122
# 122 = 0b0111 1010

Inplace Operation

सभी बिटकॉइन ऑपरेटरों ( ~ को छोड़कर) के पास अपने स्वयं के संस्करण हैं

a = 0b001
a &= 0b010 
# a = 0b000

a = 0b001
a |= 0b010 
# a = 0b011

a = 0b001
a <<= 2 
# a = 0b100

a = 0b100
a >>= 2 
# a = 0b001

a = 0b101
a ^= 0b011 
# a = 0b110


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow