2012-05-21 16 views
13

मैं दो 32 बिट पूर्णांक (int) को एक 64 बिट long और इसके विपरीत कैसे परिवर्तित कर सकता हूं?लंबे समय तक दो int और इसके विपरीत

+0

आप उन्हें किस तरह से परिवर्तित करना चाहते हैं? एक संभावना: (एक << Integer.SIZE) | बी –

+0

हस्ताक्षर या हस्ताक्षरित? अगर हस्ताक्षरित है, तो ऋणात्मक मूल्यों का क्या अर्थ होगा? –

+0

[जावा में लंबे समय तक दो इंट्स भंडारित करने का संभावित डुप्लिकेट] (https://stackoverflow.com/questions/12772939/java-storing-two-ints-in-a-long) – Vadzim

उत्तर

1

देशांतर के Ints:

long c = ((long)a << 32) | ((long)b & 0xFFFFFFFL); 

मैं इसे पाठक रिवर्स गणना प्रदर्शन करने के लिए एक व्यायाम के रूप में छोड़ देंगे। लेकिन संकेत है; अधिक बिट-शिफ्ट और bit-masks का उपयोग करें।

+0

क्या यह 'b <0 के साथ सही ढंग से काम करता है '? –

+0

@AleksG: अच्छा पकड़ो! –

+0

मुझे लगता है कि परिस्थितियों को देखते हुए बी को पहले ही मान्य माना जा सकता है। – Tharwen

32
long c = (long)a << 32 | b & 0xFFFFFFFFL; 
int aBack = (int)(c >> 32); 
int bBack = (int)c; 

जावा में, आपको बहुत सारे कोष्ठक, या रिवर्स गणना पर कोई मास्किंग की आवश्यकता नहीं है।

+1

पट्टेदार: 'के लिए (लंबा i = Long.MIN_VALUE; i <= Long.MAX_VALUE; i ++) {... ' –

+0

2 9 2 साल इससे भी कम है। मेरा कंप्यूटर भी 2 9 2 साल का दावा करता है, जैसा कि हर कोई एल्स होगा। मेरे लिए '(स्टॉप - स्टार्ट) * 2.0/रेप्स * लांग.एमएक्स_वीएमएल) '1.207154932183553E22 है जबकि लॉन्ग.मैक्सवेल्यू 9 223372036854775807 है, इसलिए जब' लंबा 'होता है तो हर कोई 9223372036854775807 के साथ समाप्त होता है। जैसा कि 1/1308 वां है सही मूल्य वास्तव में 382,000 साल होना चाहिए। (फिर भी +1 हालांकि वास्तविक उत्तर सही है) –

+0

हाहा, बहुत अच्छा रिचर्ड। मैं कभी भी मिलिस-टू-कुछ और रूपांतरण को मैन्युअल रूप से करने की आदत में नहीं हूं, लेकिन मैं शायद ही कभी सैकड़ों (या सैकड़ों हजारों) वर्षों में मिलीसेकंद संकल्प प्राप्त करने का प्रयास करता हूं। जैसा कि मैं अब शिक्षक नहीं हूं, मैं बस पूरे "अभ्यास" बिट को संपादित कर दूंगा। जवाब इतना लंबा होने की आवश्यकता नहीं है। – Fuwjax

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