2010-02-09 18 views
5

में परिवर्तित करें मैं डबल मान को बाइनरी मान में कैसे परिवर्तित कर सकता हूं।डबल मान को बाइनरी मान

मैं 125252525235558554452221545332224587265 नीचे इस तरह की कुछ मूल्य है मैं द्विआधारी format..so मैं डबल में यह रख रहा हूँ और उसके बाद में बदलने की कोशिश कर रहा करने के लिए इस परिवर्तित करना चाहते हैं बाइनरी (1 & 0 के) .. मैं सी # .net

उपयोग कर रहा हूँ
+0

आपको अपने प्रश्न में थोड़ा और विशिष्ट होना चाहिए। प्रोग्रामिंग भाषा, सीपीयू, ओएस इत्यादि जैसे विवरण और जो कुछ आप वास्तव में हासिल करने की कोशिश कर रहे हैं उसके बारे में थोड़ा और अधिक बेहतर उत्तर मिलेगा। http://catb.org/~esr/faqs/smart-questions.html –

उत्तर

0

यदि आपका मतलब है कि आप इसे स्वयं करना चाहते हैं, तो यह प्रोग्रामिंग प्रश्न नहीं है।

यदि आप कंप्यूटर बनाना चाहते हैं, तो फ़्लोटिंग पॉइंट इनपुट दिनचर्या का उपयोग करना सबसे आसान तरीका है और फिर परिणाम को हेक्स फॉर्म में प्रदर्शित करना है। सी ++ में:

double f = atof ("5.5555555555556E18"); 
unsigned char *b = (unsigned char *) &f; 
for (int j = 0; j < 8; ++j) 
    printf (" %02x", b [j]); 
+0

आप उल्लेख करना चाहेंगे कि 8 एक बहुत ही विशिष्ट डेटा प्रकार के लिए है। मुझे नहीं लगता कि आईईईई 754 64-बिट सी मानक द्वारा अनिवार्य है। – paxdiablo

11

ठीक है, आप एक मंच या क्या बाइनरी मान आप में रुचि रखते हैं की तरह निर्दिष्ट नहीं किया है, लेकिन नेट में वहाँ BitConverter.DoubleToInt64Bits जो की सुविधा देता है कि आप आईईईई 754 मूल्य बनाने बिट्स पर मिल बहुत आसानी से।

जावा में Double.doubleToLongBits है जो वही काम करता है।

ध्यान दें कि यदि आपके पास "125252525235558554452221545332224587265" जैसे मान हैं तो आपको पहले स्थान पर डबल स्टोर की तुलना में अधिक जानकारी मिल जाएगी।

0

एक डबल मान पहले से ही एक बाइनरी मान है। यह केवल उस प्रतिनिधित्व का विषय है जिसे आप चाहते हैं। एक प्रोग्रामिंग भाषा में जब आप इसे डबल कहते हैं, तो आपके द्वारा उपयोग की जाने वाली भाषा इसे एक तरह से समझ जाएगी। यदि आप स्मृति के समान हिस्से को एक int कहते हैं, तो यह वही संख्या नहीं है।

तो यह निर्भर करता है कि आप वास्तव में क्या चाहते हैं ... यदि आपको इसे डिस्क या नेटवर्क पर लिखना है, तो आपको BigEndian/LittleEndian के बारे में सोचना होगा।

+0

मेरे पास 125252525235558554452221545332224587265 से नीचे कुछ मूल्य है, मैं इसे बाइनरी प्रारूप में परिवर्तित करना चाहता हूं .. इसलिए मैं इसे डबल में रख रहा हूं और फिर बाइनरी (1 और 0 के) में कनवर्ट करने की कोशिश कर रहा हूं .. मैं सी # .net – raj

+0

बीटीडब्लू का उपयोग कर रहा हूं, वह संख्या 127 बिट लंबी है, इसलिए केवल दोहरी के साथ अनुमानित (खराब) हो सकती है। –

6

सी में, आप इस तरह से है, जो union निर्माण का एक क्लासिक इस्तेमाल होता है उदाहरण के लिए यह कर सकते हैं:

int i; 
union { 
double x; 
unsigned char byte[sizeof (double)]; 
} converter; 

converter.x = 5.5555555555556e18; 

for(i = 0; i < sizeof converter.byte; i++) 
    printf("%02x", converter.byte[i]); 

आप एक main() में इस छड़ी और इसे चलाते हैं, तो यह कुछ इस तरह मुद्रित हो सकता है :

~/src> gcc -o floatbits floatbits.c 
~/src> ./floatbits 
ba b5 f6 15 53 46 d3 43 

नोट यह है कि हालांकि, ज़ाहिर है, मंच पर निर्भर अपने endianness में है। उपरोक्त एक सेमिनॉन सीपीयू पर चल रहे एक लिनक्स सिस्टम से है, यानी यह थोड़ा एंडियन है।

-1

इन बड़ी संख्याओं के लिए (जिन्हें डबल का उपयोग करके सटीक रूप से प्रस्तुत नहीं किया जा सकता है) आपको आवश्यक जानकारी रखने के लिए कुछ विशेष कक्षा का उपयोग करने की आवश्यकता है।

सी # दशमलव वर्ग प्रदान करता है:

दशमलव मान प्रकार दशमलव सकारात्मक 79.228.162.514.264.337.593.543.950.335 से नकारात्मक 79.228.162.514.264.337.593.543.950.335 के बीच की संख्याएं प्रतिनिधित्व करता है। दशमलव गणना प्रकार वित्तीय गणनाओं के लिए उपयुक्त है जिसमें बड़ी संख्या में महत्वपूर्ण अभिन्न और आंशिक अंक और कोई गोल-ऑफ त्रुटियां नहीं होती हैं। दशमलव प्रकार गोल करने की आवश्यकता को खत्म नहीं करता है। इसके बजाय, यह गोल करने के कारण त्रुटियों को कम करता है। उदाहरण के लिए, निम्न कोड का 0.9999999999999999999999999999 बल्कि 1. से

आप इस से भी बड़ा सटीक की जरूरत है, आप अपने खुद के वर्ग मुझे लगता है कि बनाने की जरूरत है एक परिणाम पैदा करता है।इन्ट्स के लिए यहां एक है: http://sourceforge.net/projects/cpp-bigint/ हालांकि यह सी ++ के लिए प्रतीत होता है।

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