2010-03-03 9 views
21

मुझे वास्तव में बड़ी संख्या मिली है: 57 992188 9 8 और इसे 13 बिट्स में स्थानांतरित करना चाहते हैं।
तो, windows-कैलकुलेटर या अजगर मुझे देता है:जावास्क्रिप्ट में बिट्सफ़िफ़्ट

 
5799218898 >> 13 | 100010100100001110011111100001 >> 13 
70791   | 10001010010000111 

जैसी उम्मीद थी।

लेकिन जावास्क्रिप्ट:

 
5799218898 >> 13 | 100010100100001110011111100001 >> 13 
183624   | 101100110101001000 

मैं इसे जावास्क्रिप्ट में आंतरिक पूर्णांक प्रतिनिधित्व की वजह से लगता है, लेकिन उस बारे में कुछ भी नहीं मिल रहा।

+3

सही उत्तर वास्तव में 707912 (10101100110101001000) है जो इसे स्पष्ट करता है कि पहले दो बाइनरी अंक कटा हुआ हो रहे हैं। – Miles

उत्तर

25

ईसीएमएस्क्रिप्ट (जावास्क्रिप्ट) बिटवाई ऑपरेशंस में हमेशा 32-बिट में होते हैं। इसलिए 57992188 9 8 32-बिट में कटा हुआ है जो 1504251602 बन जाता है। यह पूर्णांक >> 13 183624 देता है।

पायथन में वे मनमानी-लंबाई पूर्णांक हैं। तो कोई समस्या नहीं है।

(और सही जवाब 707912. होना चाहिए)

+0

धन्यवाद, यही वह है। ऐसा लगता है कि मैं इस व्यवहार को इस तरह पाइथन में अनुकरण कर सकता हूं (57 992188 9 8 और 0xFFFFFFFF) >> 13 – Andrew

2

संख्या आप (+५७९९२१८८९८) 32 से परे है (और विंडोज कैलकुलेटर में संख्या 5799218898. फिट करने के लिए 64-बिट, पर्याप्त हैं) बिट्स। आपने जिस जावास्क्रिप्ट इंजन का परीक्षण कर रहे हैं उसका उल्लेख नहीं किया है, लेकिन यह संभावना है कि यह 32-बिट है।

परीक्षण करने के लिए, अपनी संख्या की शुरुआत में "5" ट्रिम करें ताकि आप 32-बिट सीमा के अंदर आ सकें। तब आपकी शिफ्ट ठीक काम करनी चाहिए।

+1

मैं 64 बिट सिस्टम – Andrew

+7

पर फ़ायरफ़ॉक्स 3.6 का उपयोग कर रहा हूं सभी जावास्क्रिप्ट इंजन 64-बिट फ्लोटिंग पॉइंट नंबर का उपयोग करते हैं, और बिट-बिट के लिए 32-बिट पूर्णांक में कनवर्ट करते हैं वास्तुकला के बावजूद संचालन। यह ईसीएमएस्क्रिप्ट मानक में परिभाषित किया गया है। –

1

के रूप में निकोलस Zakas states:

हालांकि जावास्क्रिप्ट संख्या तकनीकी रूप से 64-बिट में जमा हो जाती, पूर्णांक मूल्यों का इलाज किया जैसे कि वे 32 बिट्स कर रहे हैं जब भी बिटवाइज़ ऑपरेटर्स शामिल कर रहे हैं।