ECMAScript लॉजिकल ऑपरेटर

बिट ऑपरेटर हैं, जो नंबरों के अन्दर्निचोड़ी (अर्थात् प्रतिनिधित्व करने वाले 32 बिट) पर संचालन करते हैं。

इंटीजर को दोहराया जाता है

ECMAScript द्वारा इंटीजर दो प्रकार के हैं, यथा संगणकीय द्वारा इंटीजर (सकारात्मक और नकारात्मक संख्याओं को अनुमति देता है) और असंगणकीय द्वारा इंटीजर (केवल सकारात्मक संख्याओं को अनुमति देता है)। ECMAScript में, सभी इंट डिफ़ॉल्ट संगणकीय इंटीजर हैं, इसका अर्थ क्या है?

संगणकीय द्विपद एकांक इसके मान को 31 बिट के द्वारा प्रतिनिधित्व करता है, और इसके 32वें बिट को संख्या के संज्ञा के लिए प्रतिनिधित्व करता है, 0 सकारात्मक संख्या के लिए और 1 नकारात्मक संख्या के लिए। मान की आयाम 2147483648 से -2147483647 तक है।

संगणकीय द्विपद रूप में सकारात्मक लघुगुणा को दो भिन्न तरीकों से संग्रहित किया जा सकता है, एक सकारात्मक संख्या के लिए और एक नकारात्मक संख्या के लिए। सकारात्मक संख्या का रूपांतरित द्विपद रूप में सही द्विपद है, पहले 31 बिट का प्रत्येक बिट 2 के गुणाकार है, जो पहले बिट (बिट 0) से शुरू होकर 2 का प्रतिनिधित्व करता है0दूसरा बिट (बिट 1) 2 का प्रतिनिधित्व करता है1इसके बाद के बिटों को 0 से भरा जाता है, अर्थात् उन्हें नजरअंदाज कर दिया जाता है। उदाहरण के लिए, नीचे दिए गए चित्र में संख्या 18 का प्रतिनिधित्व दिखाया गया है。

32 वीं बाइनरी प्रदर्शन के साथ सिग्नेड इंटीजर

18 का द्विपद प्रतिनिधित्व केवल पहले 5 बिट का उपयोग करता है, वे इस संख्या के वैध बिट हैं। संख्या को द्विपद श्रृंखला में परिवर्तित करके, वैध बिट देखे जा सकते हैं:

var iNum = 18;
alert(iNum.toString(2));	// "10010" निकालता है

यह कोड केवल "10010" निकालता है, नहीं कि 18 का 32 बिट प्रतिनिधित्व। अन्य नंबरों का कोई महत्व नहीं है, क्योंकि केवल पहले 5 बिट का उपयोग करके इस दशांक संख्या को पहचाना जा सकता है। नीचे दिए गए चित्र के अनुसार:

5 वीं बाइनरी प्रदर्शन के साथ इंटीजर 18

负数也存储为二进制代码,不过采用的形式是二进制补码。计算数字二进制补码的步骤有三步:

  1. नकारात्मक संख्या भी द्विपदांक कोड के रूप में संग्रह की जाती है, लेकिन इसका रूप द्विपदांक सुपरस्पेक्ट्रम का होता है। नंबर के द्विपदांक सुपरस्पेक्ट्रम की गणना करने के लिए चार चरण हैं:
  2. इस संख्या के निरपेक्ष संस्करण के द्विपदांक रूप को निर्धारित करें (उदाहरण के लिए, -18 के द्विपदांक सुपरस्पेक्ट्रम की गणना करने के लिए, पहले 18 के द्विपदांक रूप को निर्धारित करना आवश्यक है)
  3. द्विपदांक उल्टी के उपर 1 जोड़ दें

-18 का द्विपदांक रूप निर्धारित करने के लिए, पहले 18 का द्विपदांक रूप प्राप्त करना आवश्यक है, जैसा कि नीचे दिया गया है:

0000 0000 0000 0000 0000 0000 0001 0010

अगले, द्विपदांक उल्टी की गणना करें, जैसा कि नीचे दिया गया है:

1111 1111 1111 1111 1111 1111 1110 1101

अंतिम में, द्विपदांक उल्टी के उपर 1 जोड़ दें, जैसा कि नीचे दिया गया है:

1111 1111 1111 1111 1111 1111 1110 1101
                                      1
---------------------------------------
1111 1111 1111 1111 1111 1111 1110 1110

इसलिए, -18 का द्विपदांक रूप 1111 1111 1111 1111 1111 1111 1110 1110 है। याद रखें कि धनात्मक पूर्णांक का संभाल करते समय, डेवलपर 31 वाना बिट पर पहुंच नहीं कर सकते।

आश्चर्य की बात है कि नकारात्मक पूर्णांक को द्विपदांक शब्द रूप में परिवर्तित करने के बाद, ECMAScript द्विपदांक उत्परित नहीं करता, बल्कि नकारात्मक सूचक के साथ संख्या के निरपेक्ष द्विपदांक को प्रतिपादित करता है। उदाहरण के लिए:

var iNum = -18;
alert(iNum.toString(2));	//आउटपुट "-10010"

इस कोड ने "-10010" आउटपुट दिया है, नहीं कि द्विपदांक, इससे 31 वाना बिट पर पहुंचने से बचने के लिए। लचीलापन के लिए, ECMAScript एक साधारण तरीके से इंटीजर का संभाल करता है, ताकि डेवलपर को उनके उपयोग के बारे में चिंता न करनी पड़े।

दूसरी ओर, अधनात्मक पूर्णांक अंतिम बिट को एक और संख्याकांड के रूप में पढ़ता है। इस पैटर्न में, 32 वाना (संख्या के सूचक) गणात्मक चिह्न को प्रतिपादित नहीं करता, बल्कि इसका मूल्य 2 है।31इस अतिरिक्त बिट के कारण, अधनात्मक पूर्णांक का रंग 0 से 4294967295 तक है। 2147483647 से कम के पूर्णांक के लिए, अधनात्मक पूर्णांक धनात्मक पूर्णांक के समान दिखता है, लेकिन 2147483647 से बड़े पूर्णांक के लिए, 31 वाने (धनात्मक पूर्णांक में यह बिट हमेशा 0 होता है) का उपयोग करना पड़ता है।

अधनात्मक पूर्णांक को शब्द रूप में परिवर्तित करने के बाद, केवल उनके वैध बिटों को वापस किया जाता है।

ध्यान दें:सभी पूर्णांक निर्देशकों को मूलभूत रूप से धनात्मक पूर्णांक के रूप में संग्रह किया जाता है। केवल ECMAScript के विकल्पित संग्रह ऑपरेटरों से ही अधनात्मक पूर्णांक बनाया जा सकता है।

विकल्पित संग्रह NOT

विकल्पित संग्रह NOT नक़्काशी ( ~ ) से प्रतिपादित है, यह ECMAScript में द्विपदांक गणित से संबंधित कम से कम ऑपरेटरों में से एक है।

बिट ऑपरेशन NOT तीन चरणों का प्रक्रिया हैः

  1. ऑपरेशन संख्या को 32 बिट संख्या में बदलना
  2. द्विपद संख्या को इसके द्विपद उल्ट बदलना
  3. द्विपद संख्या को फ्लॉटिंग पॉइंट संख्या में बदलना

उदाहरण:

var iNum1 = 25;		//25 समान 00000000000000000000000000011001
var iNum2 = ~iNum1;	// 11111111111111111111111111100110 में बदला गया
alert(iNum2);		//आउटपुट "-26"

बिट ऑपरेशन NOT वास्तव में नंबर को नकारात्मक करने और 1 से कम करने का काम करता है, इसलिए 25 -26 बन जाता है। नीचे दिये गये तरीके से भी उतना ही परिणाम मिलता हैः

var iNum1 = 25;
var iNum2 = -iNum1 -1;
alert(iNum2);	//आउटपुट -26

बिट ऑपरेशन AND

बिट ऑपरेशन AND संयोजक (&) से प्रदर्शित होता है, सीधे नंबर के द्विपद रूप के साथ ऑपरेशन करता है। प्रत्येक नंबर के अंकों को एक साथ किया जाता है, फिर एक ही स्थान पर दो अंकों को AND ऑपरेशन किया जाता है:

पहली संख्या के संख्यात्मक सारणीय दायाँभी सर्वाधिक गतिविधि दूसरी संख्या के संख्यात्मक सारणीय दायाँभी सर्वाधिक गतिविधि परिणाम
1 1 1
1 0 0
0 1 0
0 0 0

उदाहरण में, नंबर 25 और 3 को AND ऑपरेशन करने का कोड नीचे दिया गया हैः

var iResult = 25 & 3;
alert(iResult);	//आउटपुट "1"

25 और 3 को AND ऑपरेशन का परिणाम 1 है। क्यों? विश्लेषण नीचे दिया गया हैः

 25 = 0000 0000 0000 0000 0000 0000 0001 1001
  3 = 0000 0000 0000 0000 0000 0000 0000 0011
---------------------------------------------
AND = 0000 0000 0000 0000 0000 0000 0000 0001

देखा जा सकता है कि 25 और 3 में केवल एक अंक स्थान (अंक 0) जहां 1 रखे गए हैं, इसलिए, अन्य अंक स्थानों के लिए 0 उत्पन्न होते हैं, इसलिए परिणाम 1 है।

बिट ऑपरेशन OR

बिट ऑपरेशन OR संयोजक (|) से प्रदर्शित होता है, यह सीधे नंबर के द्विपद रूप के साथ ऑपरेशन करता है। प्रत्येक अंक के उपर गणना करते समय, OR ऑपरेशन निम्नलिखित नियमों का प्रयोग करता हैः

पहली संख्या के संख्यात्मक सारणीय दायाँभी सर्वाधिक गतिविधि दूसरी संख्या के संख्यात्मक सारणीय दायाँभी सर्वाधिक गतिविधि परिणाम
1 1 1
1 0 1
0 1 1
0 0 0

अभी भी AND ऑपरेशन के उदाहरण का प्रयोग करते हुए, 25 और 3 को OR ऑपरेशन करने का कोड नीचे दिया गया हैः

var iResult = 25 | 3;
alert(iResult);	//आउटपुट "27"

25 और 3 को OR ऑपरेशन का परिणाम 27 हैः

25 = 0000 0000 0000 0000 0000 0000 0001 1001
 3 = 0000 0000 0000 0000 0000 0000 0000 0011
--------------------------------------------
OR = 0000 0000 0000 0000 0000 0000 0001 1011

देखा जा सकता है कि दो नंबरों में, कुल 4 अंक स्थानों में 1 रखे गए हैं, इन स्थानों को परिणाम को दे दिया गया है। द्विपद निर्देशांक 11011 समान 27 है।

सारणीय ऑपरेशन XOR

सारणीय ऑपरेशन XOR संकेतक (^) से प्रदर्शित होता है, बेशक, यह सीधे द्विपदी रूप में ऑपरेशन करता है। XOR OR से अलग है, जब एक संख्यात्मक सारणीय दायाँभी सर्वाधिक गतिविधि को संग्रहीत किया जाता है, तभी यह 1 वापस देता है। तथ्य सारणी नीचे दिया गया है:

पहली संख्या के संख्यात्मक सारणीय दायाँभी सर्वाधिक गतिविधि दूसरी संख्या के संख्यात्मक सारणीय दायाँभी सर्वाधिक गतिविधि परिणाम
1 1 0
1 0 1
0 1 1
0 0 0

दो संख्याओं को XOR ऑपरेशन करने का कोड नीचे दिया गया है:

var iResult = 25 ^ 3;
alert(iResult);	//आउटपुट "26"

25 और 3 को XOR ऑपरेशन करने का परिणाम 26 है:

 25 = 0000 0000 0000 0000 0000 0000 0001 1001
  3 = 0000 0000 0000 0000 0000 0000 0000 0011
---------------------------------------------
XOR = 0000 0000 0000 0000 0000 0000 0001 1010

देखा जा सकता है कि दो संख्याओं में, 4 संख्यात्मक सारणीय दायाँभी सर्वाधिक गतिविधि को संग्रहीत किया गया है, जो परिणाम में संग्रहीत किया जाता है। द्विपदी कोड 11010 बराबर 26 है।

बायाँभी सर्वाधिक गतिविधि

बायाँभी सर्वाधिक गतिविधि संकेतक दो छोटे संकेतकों (<<) से प्रदर्शित होता है। यह संख्या के सभी संख्यात्मक सारणीय दायाँभी सर्वाधिक गतिविधि करता है, और निर्दिष्ट संख्या की सारणीय दायाँभी सर्वाधिक गतिविधि करता है। उदाहरण में, संख्या 2 (द्विपदी 10) को 5 स्थानों बायाँभी सर्वाधिक गतिविधि करने पर, परिणाम 64 (द्विपदी 1000000) होगा:

var iOld = 2;		//द्विपदी 10
var iNew = iOld << 5;	//द्विपदी 1000000 दशांश 64

ध्यान दें:बायाँभी सर्वाधिक गतिविधि के समय, संख्या के दायाँभी बढ़ते हुए 5 खाली स्थान बन जाते हैं। बायाँभी सर्वाधिक गतिविधि संकेतक इन स्थानों को 0 से भरता है, ताकि परिणाम पूर्ण 32 विन्यासित संख्या बन जाए।

संख्या 2 को लेफ्ट शिफ्ट ऑपरेशन किया गया

ध्यान दें:बायाँभी सर्वाधिक गतिविधि संकेतक संकेतक को बनाए रखता है। उदाहरण में, यदि -2 को 5 स्थानों बायाँभी सर्वाधिक गतिविधि किया जाए, तो प्राप्त संख्या -64 होगी, नहीं 64। “संकेतक अभी भी 32वें स्थान पर संग्रहीत है?” हाँ, लेकिन यह ECMAScript के पीछे के पटल पर किया जाता है, और डेवलपर इसका सीधा उपयोग नहीं कर सकता। यदि नकारात्मक संख्या के दोसरे संकेतक को दोसरे स्थान पर संग्रहीत किया जाए, तो इसे -10 के रूप में प्रदर्शित किया जाएगा (उदाहरण में, -2 को -10 के रूप में प्रदर्शित किया जाएगा)।

सारणीय दायाँभी सर्वाधिक गतिविधि

सारणीय दायाँभी सर्वाधिक गतिविधि संकेतक दो बड़े संकेतकों (>>) से प्रदर्शित होता है। यह 32 विन्यासित संख्या के सभी संख्यात्मक सारणीय दायाँभी सर्वाधिक गतिविधि करता है, और इस संख्या के संकेत (सकारात्मक या नकारात्मक) को बनाए रखता है। सारणीय दायाँभी सर्वाधिक गतिविधि संकेतक बायाँभी सर्वाधिक गतिविधि संकेतक से विपरीत है। उदाहरण में, 64 को 5 स्थानों दायाँभी सर्वाधिक गतिविधि करने पर, यह 2 बन जाएगा:

var iOld = 64;		//द्विपद 1000000
var iNew = iOld >> 5;	//द्विपद 10 दशमिक 2

इसी तरह, स्थानांतरण के बाद खाली स्थान होते हैं।इस बार, खाली स्थान संख्या के बाईं ओर है, लेकिन सूचकस्थान के बाद है।ECMAScript इन खाली स्थानों को सूचकस्थान के मूल्य के साथ भरता है, पूर्ण संख्या बनाता है, जैसा कि नीचे दिए गए चित्र में दिखाया गया है:

संख्या 64 को साइग्नेड राइट शिफ्ट ऑपरेशन किया गया

असीमित दायांभिमुख ऑपरेटर

असीमित दायांभिमुख ऑपरेटर तीन से अधिक बड़े बड़े चिह्नों (>>>) से प्रतिनिधित्व किया जाता है, यह असीमित 32 बिट संख्याओं के सभी बिटों को पूरी तरह से दायांभिमुख जोड़ता है।सकल संख्याओं के लिए, असीमित दायांभिमुख ऑपरेटर का परिणाम वास्तविक दायांभिमुख ऑपरेटर के समान है।

वास्तविक दायांभिमुख ऑपरेटर के उदाहरण के रूप में, 64 को 5 बिट दायांभिमुख ऑपरेटर से जोड़ा जाता है, तो 2 होगा:

var iOld = 64;		//द्विपद 1000000
var iNew = iOld >>> 5;	//द्विपद 10 दशमिक 2

नकारात्मक संख्याओं के लिए, स्थिति अलग है।

असीमित दायांभिमुख ऑपरेटर द्वारा वस्तुतः 0 के साथ सभी खाली स्थानों को भरा जाता है।सकल संख्याओं के लिए, यह वास्तविक दायांभिमुख ऑपरेटर के साथ एक समान काम करता है, लेकिन नकारात्मक संख्याएं सकल संख्या के रूप में प्रदर्शित की जाती हैं।

असीमित दायांभिमुख ऑपरेटर के परिणाम एक 32 बिट का सकल संख्या होता है, इसलिए नकारात्मक संख्याओं के असीमित दायांभिमुख ऑपरेटर का परिणाम हमेशा एक बहुत बड़ी संख्या होता है।उदाहरण में, यदि -64 को 5 बिट दायांभिमुख ऑपरेटर से जोड़ा जाता है, तो 134217726 होगा।इस परिणाम को कैसे प्राप्त किया जाता है?

इसे हासिल करने के लिए, इस संख्या को असीमित समानांतर रूप में परिवर्तित करने की आवश्यकता है (यद्यपि संख्या स्वयं विशेषाकृत सांगतिक है), इसे नीचे दिए गए कोड से प्राप्त किया जा सकता है:

var iUnsigned64 = -64 >>> 0;

तब, Number की टाइप के toString() का उपयोग करके इसका वास्तविक बिट प्रतिनिधित्व प्राप्त करें, जो 2 के आधार में है:

alert(iUnsigned64.toString(2));

इससे 11111111111111111111111111000000 उत्पन्न होगा, जो सकल इंटीजर -64 के द्विपद सहयोग का प्रतिनिधित्व करता है, लेकिन यह असीमित इंटीजर 4294967232 से बराबर है।

इसलिए अनुप्रयोग में असीमित दायांभिमुख ऑपरेटर को सावधानी से इस्तेमाल करें。