2012-05-17 20 views
5

मैं double या float के एकल बिट्स (या एक संपूर्ण चर) कैसे प्राप्त कर सकता हूं?फ्लोट को बिट्स में कनवर्ट करें

उदाहरण के लिए यदि मेरे पास फ्लोट ए = 0.5 है;
"00111111000000000000000000000000"

या हेक्स में:
"F000000"

+0

इस होमवर्क है? – dckrooney

+0

नहीं क्यों? यह http://stackoverflow.com/questions/10637594/calculating-double-neighbours-of-a-decimal-value से संबंधित है। मैंने सोचा कि अगर मैं द्विआधारी मूल्य से 1 घटाता हूं, तो मुझे दूसरा मूल्य मिल जाएगा। –

+3

@dcrooney ने पूछा क्योंकि यह जानना अच्छा है कि यह होमवर्क है क्योंकि जब यह होमवर्क होता है तो हम अपने उत्तरों से सावधान रहने की कोशिश करते हैं कि हम आपकी शिक्षा को बाधित नहीं करते हैं :) – kentcdodds

उत्तर

9
long bits = Double.doubleToLongBits(myDouble); 
System.out.println(Long.toBinaryString(bits)); 
+1

यदि साइन बिट शून्य है, तो इसे मुद्रित नहीं किया जाएगा! – math

+0

@math, क्या आप समझा सकते हैं? क्या आपका मतलब है कि साइन बिट मुद्रित नहीं किया जाएगा, या इसकी पूरी तरह से मूल्य नहीं होगा? यदि पूर्व, हां, 'Long.toBinaryString' प्रति अतिरिक्त बिट्स मुद्रित नहीं करता है "यह [हस्ताक्षरित लंबा] मान बाइनरी (बेस 2) में ASCII अंकों की स्ट्रिंग में परिवर्तित नहीं होता है, जिसमें कोई अतिरिक्त अग्रणी 0 नहीं है", लेकिन यह नहीं है साइन बिट के लिए अद्वितीय। आप वांछित कॉलम चौड़ाई प्राप्त करने के लिए बाएं से मूल्य को पैड शून्य कर सकते हैं। –

+0

जैसा कि मैंने कहा, यह शून्य की वजह से मुद्रित नहीं किया जाएगा। बेशक, कोई इसे अग्रणी शून्य के साथ पैड कर सकता है, लेकिन उसमें उपरोक्त कथन का गलत व्याख्या किया जा सकता है। और हां, यदि एक्सपोनेंट के पास शून्य भी है तो वे भी इसकाट लेंगे। – math

1

Double.byteValue() आपकी मदद कर सकते

मैं करने के लिए एक String बराबर उम्मीद होती है।

32-बिट समकक्ष Float.byteValue() भी है।

+4

क्यों +4? उनके उदाहरण के आधार पर, वह वह नहीं चाहता जो वह चाहता है। – user949300

+2

बाइट मान केवल '(बाइट) myDouble' के बराबर देता है। यह एक हानिकारक रूपांतरण है। –

+1

** यह उत्तर गलत है। ** 'Float.byteValue()' और 'Double.byteValue() 'बस बाइट को नंबर पर रखता है। – Pacerier

3

Float.floatToIntBits() or Float.floatToRawIntBits() पर देखें। यह आपको एक int के रूप में बिट्स हो जाता है। यदि आपको इसे स्ट्रिंग के रूप में चाहिए, Integer.toBinaryString()

नोट, एचएसबी चालू होने पर कोई समस्या हो सकती है - आपको "अतिप्रवाह" से बचने के लिए लंबे समय तक परिवर्तित करने की आवश्यकता हो सकती है।

+0

एक आईईईई -754 फ्लोट में एचएसबी साइन बिट है, जब तक कि यह एक NaN मान न हो, इसलिए परिणामस्वरूप int का संकेत फ्लोट के समान होगा -0.0 के अपवाद के साथ। –

+0

सहमत हुए। वह टिप्पणी इसलिए थी क्योंकि जावा int <-> स्ट्रिंग कोड एचएसबी के बारे में चिंतित है। जैसे [यह स्टैक ओवरफ्लो चर्चा] (http://stackoverflow.com/questions/8888946/converting-32-bit-binary-string-with-integer-parseint-fails)। हालांकि मुझे लगता है कि यह मुख्य रूप से स्ट्रिंग्स को पार्स करने के लिए है, उन्हें नहीं बना रहा है, ताकि समस्या यहां लागू न हो। – user949300

0
public void printFloatBits(float f) { 
    int bits = Float.floatToIntBits(f); 
    // Extract each bit from 'bits' and compare it by '0' 
    for (int i=31; i>=0; --i) { 
     // int mask = 1 << i; 
     // int oneBit = bits & mask; 
     // oneBit == 0 or 1? 
     System.out.print((bits & (1 << i)) == 0 ? "0" : "1"); 
    } 
} 
+2

कृपया, अपने कोड में कुछ स्पष्टीकरण जोड़ें। –