2011-08-05 16 views
5

मैंने & ऑपरेटर के साथ जावास्क्रिप्ट और सी # में एक ही प्रक्रिया का काम किया है, लेकिन परिणाम अलग था।जावास्क्रिप्ट और सी # में उपयोग और ऑपरेटर के दौरान अलग-अलग मूल्य क्यों देता है?

सी # कोड

Int64 x = (634586400000000000 & 4611686018427387903); 
x= 634586400000000000; 

जावास्क्रिप्ट कोड

var x = (634586400000000000 & 4611686018427387903); 
x= 0; 

कोई भी विचार?

+0

... क्योंकि जावास्क्रिप्ट और सी # अलग-अलग भाषाएं हैं? – BoltClock

उत्तर

2

ऐसा लगता है कि आप जावास्क्रिप्ट के अधिकतम पूर्णांक मान से अधिक हैं। जावास्क्रिप्ट पूर्णांक के लिए अधिकतम समर्थित मान 2^53 पर spec'd है।

अद्यतन:

मेरे प्रारंभिक प्रतिक्रिया यहाँ सही नहीं था - मुद्दा, जावास्क्रिप्ट का अधिकतम पूर्णांक मान नहीं है यह एम्परसेंड सेशन द्वारा नियंत्रित प्रत्येक संकार्य की अधिकतम मूल्य है:

var biggest = 4294967291; // maximum 32 bit unsigned integer 
alert(biggest & 1); // alerts 1 
alert((biggest + 1) & 1); // alerts 0 

मुबारक कोडिंग !

बी

5

Bitwise operators जावास्क्रिप्ट में हस्ताक्षर किए गए 32-बिट पूर्णांक के लिए ऑपरेंड परिवर्तित (देशी आईईईई 754 तैरता संख्या में जमा हो जाती है से)।

+0

[bigInt.js] जैसी एक लाइब्रेरी (http://www.leemon.com/crypto/BigInt.html) यहां सहायता कर सकती है, हालांकि मैंने व्यक्तिगत रूप से इसे आजमाया नहीं है। – darioo

+1

इसका मतलब है कि आप किसी भी द्विपक्षीय संचालन को लगभग 2 अरब या उससे कम (लगभग) -2 अरब से कम संख्याओं पर नहीं कर सकते हैं। यदि आप करते हैं, तो व्यवहार परिभाषित नहीं किया जाता है। –

+0

वास्तव में व्यवहार अच्छी तरह से परिभाषित किया गया है। "जावास्क्रिप्ट: द डिफेंसिटिव गाइड" से, पृष्ठ 73: "यदि बिटवाई ऑपरेटरों का उपयोग ऐसे ऑपरेटरों के साथ किया जाता है जो 32-बिट पूर्णांक प्रतिनिधित्व में फ़िट होने के लिए पूर्णांक या बहुत बड़े नहीं होते हैं, तो वे बस ड्रॉप करके 32-बिट पूर्णांक पर ऑपरेंड को मजबूर करते हैं ऑपरेंड के किसी भी आंशिक भाग या 32 वें से परे किसी भी बिट्स का। " –

0

बिटवाई ऑपरेटरों अधिकतम 32 बिट्स के साथ सौदा करते हैं। मुझे नहीं पता कि व्यवहार कब परिभाषित किया जाता है जब इसे बड़े मूल्यों से निपटने के लिए कहा जाता है।

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