2012-05-02 14 views
11

मैं कुछ जे एस कोड में यह देखा:ऑपरेटर ">>" (डबल तीर) और "|" क्या करते हैं (एकल पाइप) जावास्क्रिप्ट में मतलब है?

 index = [ 
      ascii[0] >> 2, 
      ((ascii[0] & 3) << 4) | ascii[1] >> 4, 
      ((ascii[1] & 15) << 2) | ascii[2] >> 6, 
      ascii[2] & 63 
     ]; 

मैं काफी पता है कि इस के लिए बहुत मायने रखती चाहते हैं। विशेष रूप से ">>", एक पाइप "|" और अंतिम पंक्ति पर प्रतीक "&" प्रतीक?

बहुत सराहना की!

+3

बाइनरी ऑपरेटरों। – Pointy

+1

(-1) "जावास्क्रिप्ट ऑपरेटर" के लिए खोजें ... -1 क्योंकि यह आसानी से उपलब्ध जानकारी है * और * पहले से ही स्टैक ओवरफ्लो पर पाया गया है। –

+2

http://stackoverflow.com/questions/6194950/single-pipe-in-javascript, http://stackoverflow.com/questions/6997909/what-do-and-mean-in-javascript –

उत्तर

16

x >> y को y स्थानों से x के टुकड़े शिफ्ट करने के लिए इसका मतलब है दाएं (<< बाईं ओर)।

x | y प्रत्येक बिट में एक 1 डाल अगर या तो x या y उस स्थिति में एक 1 है x और y के टुकड़े की तुलना करने का मतलब है,। सिवाय इसके कि परिणाम 1 है अगर x और y दोनों एक 1 है

x & y, | के समान है।

उदाहरण:

#left-shifting 1 by 4 bits yields 16 
1 << 4 = b00001 << 4 = b10000 = 16 

#right-shifting 72 by 3 bits yields 9 
72 >> 3 = b1001000 >> 3 = b1001 = 9 

#OR-ing 
8 | 2 = b1000 | b0010 = b1010 = 10 

#AND-ing 
6 & 3 = b110 & b011 = b010 = 2 

अधिक जानकारी के लिए search Google for "bitwise operators"

+0

थोड़ा और विस्तृत [ स्पष्टीकरण] (http://digitalfortress.tech/js/double-arrow-js-bitwise-operator/) यदि आप अभी भी पूरी तरह से आश्वस्त नहीं हैं। –

1

मेरे लिए बिटवाइज़ ऑपरेटर्स की तरह लग रहा:

http://web.eecs.umich.edu/~bartlett/jsops.html

संपादित करें: कि ascii सरणी एक मृत दे देना था ... LOL

7

>> एक सही बिटवाई शिफ्ट है। यह बिट्स लेता है और उन्हें एन स्थानों स्थानांतरित करता है। उदाहरण के लिए, 35 >> 2 जांच करते हैं:

35 = 100011 shift two places 
    001000 = 8 

और वास्तव में, 35 >> 2 == 8


| एक बिटवाइज़ या है। यह प्रत्येक ऑपरेंड में प्रत्येक बिट लेता है और उन्हें एक साथ OR OR करता है। आप इसे बाइनरी अतिरिक्त प्रकार के रूप में देख सकते हैं, लेकिन जब आप ऊपर और नीचे दोनों 1 होते हैं तो आप नहीं लेते हैं। उदाहरण के लिए, यहाँ 5 | 3 है:

5 = 101 
3 = 011 
| ----- 
    111 = 7 

और वास्तव में, 5 | 3 == 7


अंत में, & थोड़ा सा है और। यह प्रत्येक ऑपरेंड में प्रत्येक बिट लेता है, अगर 1 या तो एक बिट देने के बजाय या दूसरा एक है, तो यह 1 देता है और दूसरा एक दोनों होता है। उदाहरण के लिए, यहां 5 & 3:

5 = 101 
3 = 011 
& ----- 
    001 = 1 

इसे आज़माएं; 5 & 3 == 1


कुछ अन्य लोगों को आप कर रहे हैं << है, जो एक बाईं बिटवाइज़ बदलाव है के बारे में पता होने के लिए चाहते हो सकता है, और ^ है, जो एक XOR है (0 जब दोनों बिट्स ही कर रहे हैं, 1 वे अलग अलग हैं) ।

वास्तव में, यह n सापेक्ष 32. 1 >> 321 है। यकीन नहीं है कि क्यों।

+1

एक सहायक, गैर-स्नैकी उत्तर के लिए धन्यवाद। – Ashe

+0

यह छोड़ा गया जवाब होना चाहिए! महान स्पष्टीकरण – DoubleA

1
  • & (बिटवाइस और)
  • | (बिटवाइस या)
  • < < (वाम पारी)
  • >> (साइन-प्रचार सही पारी)

उदाहरण (https://developer.mozilla.org/en/JavaScript/Reference/Operators/Bitwise_Operators से):

बिटवाइस और:

 9 (base 10) = 00000000000000000000000000001001 (base 2) 
    14 (base 10) = 00000000000000000000000000001110 (base 2) 
        -------------------------------- 
14 & 9 (base 10) = 00000000000000000000000000001000 (base 2) = 8 (base 10) 

बाएं शिफ्ट (9 < < 2 बाइनरी में 9 बिट्स बिट्स, बाईं ओर 2 बिट्स):

 9 (base 10): 00000000000000000000000000001001 (base 2) 
        -------------------------------- 
9 << 2 (base 10): 00000000000000000000000000100100 (base 2) = 36 (base 10) 
3

>> और << ऑपरेटर थोड़ा सा बदलाव हैं। उदाहरण के लिए,

11 =  00001011 
11 << 3 = 01011000 = 88 

ऐसा नहीं है कि m << n = m * 2^n और m >> n = m/2^n ध्यान देने योग्य है। इसे कभी-कभी 2.

& और | की शक्तियों द्वारा बहुत कुशल गुणा/विभाजन करने के लिए प्रयोग किया जाता है।

11 =  00001011 
28 =  00011100 
11 & 28 = 00001000 = 8 

11 =  00001011 
28 =  00011100 
11 | 28 = 00011111 = 31 

मैं इसे पर हूँ, वहीं मैं ^ ऑपरेटर, जो सत्ता के लिए इस्तेमाल नहीं किया है उल्लेख करना चाहिए, लेकिन बिटवाइज़ के लिए विशेष-या।

11 =  00001011 
28 =  00011100 
11^28 = 00010111 = 23 
संबंधित मुद्दे