2011-10-10 11 views
72

तिगुना मैं एक StackOverflow post पर इस वाक्य को देखा और यह क्या करता है जानने के लिए उत्सुक था:जावास्क्रिप्ट से अधिक

var len = this.length >>> 0;

>>> क्या मतलब है?

+1

यह एक सही शिफ्ट ऑपरेटर है, लेकिन आप शून्य से सही क्यों बदलेंगे? क्या यह 'parseInt' करने का कोई सस्ता तरीका है? –

+3

'>> हमेशा साइन बिट को शून्य पर सेट करता है, भले ही आप शून्य बिट्स द्वारा स्थानांतरित करते हैं। –

+4

इस मामले को * क्यों * इस मामले में '>>>' ऑपरेटर के रूप में उपयोग करें: http://stackoverflow.com/questions/3081987/what-good-does-zero-fill-bit-shifting-by-0 -do-a-0/3082073 # 3082073 – CMS

उत्तर

44

यह unsigned right shift operator है। दिलचस्प बात यह है कि यह केवल bitwise operator है जो जावास्क्रिप्ट में से हस्ताक्षरित है।

>>> ऑपरेटर सही बिट्स expression2 में निर्दिष्ट की संख्या से expression1 के टुकड़े बदलाव। शून्य से बाएं भर जाते हैं। दाईं ओर से स्थानांतरित अंकों को त्याग दिया जाता है।

3

>>> एक बिट-वार ऑपरेटर, zero-fill right shift है।

मुझे लगता है कि सकारात्मक संख्या पर >>> 0 का एकमात्र प्रभाव Math.floor() जैसा निकटतम पूर्णांक तक पहुंचना है। मुझे नहीं लगता कि यह आपके उदाहरण में क्यों आवश्यक होगा, आमतौर पर .length संपत्ति (उदाहरण के लिए Array) पहले से ही एक पूर्णांक होगा।

मैंने थोड़ा सा ~~ भी उसी तरह उपयोग किया है: ~~9.5 == 9; // true

+0

मुझे संदेह है कि यह नकारात्मक संख्याओं के लिए उपयोग किए जाने पर 'Math.abs()' जैसा ही है। –

+6

यदि आप ऋणात्मक संख्या पर '>>> 0' करते हैं तो यह इसे 2 की तारीफ में परिवर्तित करता है, फिर सही शिफ्ट करता है। इसलिए '-14 >>> 0 == 1073741820'।(http://msdn.microsoft.com/en-us/library/342xfs5s%28v=vs.94%29.aspx) –

+0

@AlKepp - yup, मैंने त्रुटि देखी और इसे ठीक किया - पहले परीक्षण किया जाना चाहिए था, लेकिन यह स्पष्ट रूप से एक त्वरित ड्रॉ सवाल था :)। – nrabinowitz

6

वह ऑपरेटर एक तार्किक सही बदलाव है। यहां संख्या 0 बिट्स को स्थानांतरित कर दिया गया है। गणित के शून्य बिट्स की एक शिफ्ट का कोई प्रभाव नहीं होना चाहिए।

लेकिन यहां यह मान को एक हस्ताक्षरित 32 बिट पूर्णांक में परिवर्तित करने के लिए उपयोग किया जाता है।

90

अपने अभीष्ट अर्थ की अनदेखी करते हुए इस सबसे अधिक संभावना है, जहां आप इसे उपयोग देखेंगे:


>>> 0 यह केवल ऑपरेटर कि एक सकारात्मक पूर्णांक के लिए किसी भी प्रकार परिवर्तित कर देंगे है कि में अद्वितीय है:

"string"   >>> 0 == 0 
(function() { }) >>> 0 == 0 
[1, 2, 3]  >>> 0 == 0 
Math.PI   >>> 0 == 3 

अपने उदाहरण, var len = this.length >>> 0 में, इस पुनरावृति के लिए खत्म हो this, जो कुछ भी प्रकार this.length हो सकता है का उपयोग करने के एक पूर्णांक लंबाई होने का एक तरीका है।


इसी तरह, ~~x एक हस्ताक्षरित पूर्णांक में किसी भी चर कन्वर्ट करने के लिए इस्तेमाल किया जा सकता।

+0

क्या आप व्याख्या कर सकते हैं कि '>>>' का उपयोग करके पुनरावृत्ति कैसे करें? – K48

+1

@ K48 मुझे नहीं लगता कि उसका मतलब है * पुनरावृत्ति *, मुझे लगता है कि वह यह बलों की लंबाई को एक संख्या बनने के लिए कहता था। (अन्यथा, मैं भी उतना ही उलझन में हूं।) लेकिन यहां एक अच्छा जवाब है जो अधिक स्पष्ट करता है: https://stackoverflow.com/questions/1822350/what-is-the-javascript-operator-and-how-do-you-use- यह –

संबंधित मुद्दे