2016-12-06 6 views
29

जावा स्क्रिप्ट कोड:जावा और जावास्क्रिप्ट में ऑपरेटर >>> के बीच क्या अंतर है?

alert(-123456 >>> 0); // Prints 4294843840 

जावा कोड:

System.out.println(-123456 >>> 0); // Prints -123456 

क्यों? मैंने प्रलेखन पढ़ा है, लेकिन मुझे अंतर नहीं मिला। मैं जावा पर जावास्क्रिप्ट कोड पोर्ट कैसे करूँ?

+0

यदि आप जेएस में एक हस्ताक्षरित सही बदलाव चाहते हैं, तो '>> 'का उपयोग करें। – Bergi

+0

जावा भाग के लिए, http://stackoverflow.com/questions/2811319/difference-between-and – Tunaki

उत्तर

34

दोनों तार्किक दाएं बदलाव हैं, लेकिन जावास्क्रिप्ट में कुछ अजीबता है कि यह संख्याओं को कैसे संभालता है। आम तौर पर जावास्क्रिप्ट में संख्याएं फ्लोट होती हैं, लेकिन बिटवाई ऑपरेशंस उन्हें 32 बिट पूर्णांक को बिना हस्ताक्षरित कर देते हैं। तो भले ही मान दिखता है कि यह नहीं बदला जाना चाहिए, यह संख्या को 32 बिट हस्ताक्षरित पूर्णांक में परिवर्तित करता है।

जो मान आप देखते हैं 4294843840-123456 के समान ही बिट्स है, लेकिन हस्ताक्षरित के बजाय हस्ताक्षरित के रूप में व्याख्या की गई है।

+13

माइनर नाइट भी देखें; वे "फ्लोट-जैसी" नहीं हैं, वे * स्पष्ट रूप से * आईईईई -754 हैं, हर समय। यहां मुद्दा आंतरिक, अस्थायी रूपांतरण से आता है। –

+2

मूल रूप से जावा और जावास्क्रिप्ट दोनों में, इस उदाहरण में, कोई 'दायां-स्थानांतरण' नहीं हो रहा है (क्योंकि शिफ्ट '0' है), बल्कि जावास्क्रिप्ट में, यह केवल संख्या को एक हस्ताक्षरित संख्या में परिवर्तित कर रहा है। क्या यह समझ सही है? –

+0

हां, यह सही है। (यह इसे एक int में भी परिवर्तित कर रहा है, लेकिन यह इस मामले में कुछ भी नहीं बदलता है) – Iluvatar

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