खोज…


बिटवाइज़ ऑपरेटर

बिटवाइज़ ऑपरेटर डेटा के बिट वैल्यू पर ऑपरेशन करते हैं। ये ऑपरेटर ऑपरेंड को 32-बिट पूर्णांक दो के पूरक में परिवर्तित करते हैं

32-बिट पूर्णांकों में रूपांतरण

32 से अधिक बिट्स वाले नंबर उनके सबसे महत्वपूर्ण बिट्स को छोड़ देते हैं। उदाहरण के लिए, 32 से अधिक बिट्स वाले निम्न पूर्णांक को 32-बिट पूर्णांक में परिवर्तित किया जाता है:

Before: 10100110111110100000000010000011110001000001
After:              10100000000010000011110001000001

दो का अनुपूरण

सामान्य बाइनरी में हम 2 की शक्तियों के रूप में उनकी स्थिति के आधार पर 1 जोड़कर द्विआधारी मान पाते हैं - सबसे सही बिट 2^0 से सबसे बाईं ओर 2^n-1 जहां n बिट्स की संख्या है। उदाहरण के लिए, 4 बिट्स का उपयोग करना:

// Normal Binary
// 8 4 2 1
   0 1 1 0  => 0 + 4 + 2 + 0 => 6

दो पूरक प्रारूप का मतलब है कि संख्या के नकारात्मक समकक्ष (6 बनाम -6) एक संख्या के लिए सभी बिट्स हैं, प्लस एक। 6 के उल्टे टुकड़े होंगे:

// Normal binary
   0 1 1 0
// One's complement (all bits inverted)
   1 0 0 1  => -8 + 0 + 0 + 1 => -7
// Two's complement (add 1 to one's complement)
   1 0 1 0  => -8 + 0 + 2 + 0 => -6

नोट: एक बाइनरी नंबर के बाईं ओर अधिक 1 जोड़ने से दो की तारीफ में इसका मूल्य नहीं बदलता है। मूल्य 1010 और 1111111111010 दोनों -6

बिटवाइज़ और

बिटवाइज़ और ऑपरेशन a & b बाइनरी मान को 1 साथ लौटाता है, जहाँ दोनों बाइनरी ऑपरेंड के पास एक विशिष्ट स्थिति में 1 , और अन्य सभी पदों पर 0 है। उदाहरण के लिए:

13 & 7 => 5
// 13:     0..01101
//  7:     0..00111
//-----------------
//  5:     0..00101 (0 + 0 + 4 + 0 + 1)

वास्तविक दुनिया उदाहरण: संख्या की समानता की जाँच करें

इस "कृति" के बजाय (दुर्भाग्य से अक्सर कई वास्तविक कोड भागों में देखा जाता है):

function isEven(n) {
    return n % 2 == 0;
}

function isOdd(n) {
    if (isEven(n)) {
        return false;
    } else {
        return true;
    }
}

आप (पूर्णांक) संख्या की समता को अधिक प्रभावी और सरल तरीके से देख सकते हैं:

if(n & 1) {
    console.log("ODD!");
} else {
    console.log("EVEN!");
}

बिटवार या

बिटवाइज या ऑपरेशन a | b रिटर्न एक साथ बाइनरी मान 1 जहां या तो ऑपरेंड या दोनों आपरेंड 1 एक विशिष्ट स्थान में है, और 0 जब दोनों मान 0 की स्थिति में। उदाहरण के लिए:

13 | 7 => 15
// 13:     0..01101
//  7:     0..00111
//-----------------
// 15:     0..01111 (0 + 8 + 4 + 2 + 1)  

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

बिटवाइज़ ऑपरेशन नहीं ~a दिए गए मान के बिट्स को फ़्लिप करता है a । इसका मतलब यह है कि सभी 1 के 0 हो जाएंगे और सभी 0 के 1 हो जाएंगे।

~13 => -14
// 13:     0..01101
//-----------------
//-14:     1..10010 (-16 + 0 + 0 + 2 + 0)

बिटवाइज़ XOR

बिटवाइज़ XOR (अनन्य या) आपरेशन a ^ b स्थानों एक 1 केवल तभी दो टुकड़े अलग हैं। अनन्य या साधन एक या दूसरे, लेकिन दोनों नहीं

13 ^ 7 => 10
// 13:     0..01101
//  7:     0..00111
//-----------------
// 10:     0..01010  (0 + 8 + 0 + 2 + 0)

वास्तविक विश्व उदाहरण: अतिरिक्त मेमोरी आवंटन के बिना दो पूर्णांक मानों की अदला-बदली

var a = 11, b = 22;
a = a ^ b;
b = a ^ b;
a = a ^ b;
console.log("a = " + a + "; b = " + b);// a is now 22 and b is now 11

शिफ्ट ऑपरेटर्स

बिटवाइज शिफ्टिंग को बिट्स को बाएं या दाएं "हिलाने" के रूप में सोचा जा सकता है, और इसलिए चालू डेटा के मूल्य को बदल सकता है।

बायां शिफ्ट

बाईं शिफ्ट ऑपरेटर (value) << (shift amount) बिट्स को बाय (shift amount) बिट्स में स्थानांतरित कर देगी; सही से आने वाले नए बिट्स 0 होंगे:

5 << 2 => 20
//  5:      0..000101
// 20:      0..010100 <= adds two 0's to the right

राइट शिफ्ट ( हस्ताक्षर-प्रचार )

राइट शिफ्ट ऑपरेटर (value) >> (shift amount) को "साइन-प्रोपेगेटिंग राइट शिफ्ट" के रूप में भी जाना जाता है क्योंकि यह प्रारंभिक ऑपरेंड का संकेत रखता है। सही शिफ्ट ऑपरेटर बिट के लिए निर्दिष्ट shift amount के value को दाईं ओर शिफ्ट करता है। दाहिने ओर से स्थानांतरित किए गए अतिरिक्त बिट्स को छोड़ दिया गया है। बाईं ओर से आने वाले नए बिट्स प्रारंभिक ऑपरेंड के संकेत पर आधारित होंगे। यदि बाईं ओर-बिट 1 था तो नए बिट्स 1 और 0 लिए विसे-वर्सा होगा।

20 >> 2 => 5
// 20:      0..010100
//  5:      0..000101 <= added two 0's from the left and chopped off 00 from the right

-5 >> 3 => -1
// -5:      1..111011
// -2:      1..111111 <= added three 1's from the left and chopped off 011 from the right

राइट शिफ्ट ( शून्य भरण )

शून्य-भरण दाएं शिफ्ट ऑपरेटर (value) >>> (shift amount) बिट्स को दाईं ओर ले जाएगा, और नए बिट्स 0 सेकंड होंगे। 0 के बाएं से स्थानांतरित कर दिए जाते हैं, और अतिरिक्त बिट्स को दाईं ओर स्थानांतरित कर दिया जाता है और छोड़ दिया जाता है। इसका मतलब यह है कि यह ऋणात्मक संख्याओं को सकारात्मक बना सकता है।

-30 >>> 2 => 1073741816
//       -30:      111..1100010
//1073741816:      001..1111000

जीरो-फिल राइट शिफ्ट और साइन-प्रोपेगेटिंग राइट शिफ्ट नॉन निगेटिव नंबरों के लिए समान परिणाम देते हैं।



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