जावास्क्रिप्ट ट्रिपल से अधिक है


88

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

var len = this.length >>> 0;

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


1
यह एक सही बदलाव ऑपरेटर है, लेकिन आप शून्य से सही बदलाव क्यों करेंगे? क्या ऐसा करने का सस्ता तरीका है parseInt?
— रॉकेट हज़मत

5
>>>हमेशा साइन बिट को शून्य पर सेट करें, भले ही आप शून्य बिट द्वारा शिफ्ट हों।
— जॉन फ्लैटनेस

4
इस उत्तर के बारे में इस बात की जाँच करें कि वे इस मामले में >>>ऑपरेटर का उपयोग क्यों करते हैं : stackoverflow.com/questions/3081987/…
— क्रिश्चियन सी। सल्वाडोर

1
जावास्क्रिप्ट ट्रिपल एंगल ब्रैकेट
— wprl

मैंने देखा कि डेवलपर . mozilla.org/en/docs/Web/JavaScript/Reference/… var length = list.length >>> 0; (आपके एक के रूप में एक ही उपयोग का मामला)
— मंगल राबर्टसन

जवाबों:


49

यह एक अहस्ताक्षरित अधिकार शिफ्ट ऑपरेटर है । दिलचस्प बात यह है कि यह केवल बिटकॉइन ऑपरेटर है जो जावास्क्रिप्ट में अहस्ताक्षरित है।

>>> संचालक अभिव्यक्ति 2 में निर्दिष्ट बिट्स की संख्या द्वारा सही अभिव्यक्ति 1 के बिट्स को स्थानांतरित करता है। शून्य को बाईं ओर से भरा जाता है। दाईं ओर स्थानांतरित अंकों को खारिज कर दिया जाता है।


107

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


>>> 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किसी भी चर को एक हस्ताक्षरित पूर्णांक में बदलने के लिए उपयोग किया जा सकता है।


क्या आप बता सकते हैं कि इसका उपयोग कैसे करना है >>>?

1
@ K48 मुझे नहीं लगता कि उनका मतलब पुनरावृति , मुझे लगता है कि वह इस बलों लंबाई एक नंबर बनने के लिए कहने के लिए मतलब है। (अन्यथा, मैं समान रूप से भ्रमित हूं।) लेकिन यहां एक शानदार जवाब है जो अधिक स्पष्ट करता है: stackoverflow.com/questions/1822350/…
— माइक विलियमसन

8

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

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


3

>>>एक बिट-बुद्धिमान ऑपरेटर है, शून्य-सही दाएं शिफ्ट ।

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

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


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

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

@AlKepp - हाँ, मैंने त्रुटि देखी और इसे ठीक कर लिया - पहले परीक्षण करना चाहिए था, लेकिन यह स्पष्ट रूप से एक त्वरित ड्रा था :)।
— nrabinowitz
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.