C# में BitConverter.DoubleToInt64Bits() मेथड निर्दिष्ट डबल-प्रिसिजन फ्लोटिंग-पॉइंट संख्या को 64-बिट साइन्ड इंटीजर में परिवर्तित करता है। यह फ्लोटिंग-पॉइंट मान के बिट प्रतिनिधित्व को संरक्षित करता है।
सिंटैक्स
public static long DoubleToInt64Bits (double val);
पैरामीटर val परिवर्तित की जाने वाली संख्या है।
उदाहरण 1: सामान्य डबल मान
using System;
public class Demo
{
public static void Main()
{
double d = 5.646587687;
Console.Write("Value = " + d);
long res = BitConverter.DoubleToInt64Bits(d);
Console.Write("\n64-bit signed integer = " + res);
}
}
आउटपुट
Value = 5.646587687 64-bit signed integer = 4618043510978159912
उदाहरण 2: छोटा मान
using System;
public class Demo
{
public static void Main()
{
double d = 0.001;
Console.Write("Value = " + d);
long res = BitConverter.DoubleToInt64Bits(d);
Console.Write("\n64-bit signed integer = " + res);
}
}
आउटपुट
Value = 0.001 64-bit signed integer = 4562254508917369340
IEEE 754 बिट विश्लेषण
5.646587687 का बिट प्रतिनिधित्व:
double d = 5.646587687; long bits = BitConverter.DoubleToInt64Bits(d); // बाइनरी में (64 बिट): // 0 10000000001 01101010110111001101101100110011001100110011001100110100 // S EEEEEEEEEEE MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM // // साइन: 0 (धनात्मक) // एक्सपोनेंट: 1025 - 1023 = 2 (2^2 = 4 गुणक) // मेंटिसा: 1.41164692175 (अंतर्निहित 1.0 + फ्रैक्शन) // मान: 1.4116... × 4 ≈ 5.6465
विशेष मानों का व्यवहार
| डबल मान | बिट पैटर्न (हैक्साडेसिमल) | विवरण |
|---|---|---|
| 0.0 | 0x0000000000000000 | सभी बिट्स शून्य |
| -0.0 | 0x8000000000000000 | केवल साइन बिट सेट |
| 1.0 | 0x3FF0000000000000 | एक्सपोनेंट = 1023 (बायस) |
| NaN | 0x7FF8000000000000* | एक्सपोनेंट सभी 1, मेंटिसा ≠ 0 |
| +Infinity | 0x7FF0000000000000 | एक्सपोनेंट सभी 1, मेंटिसा = 0 |
| -Infinity | 0xFFF0000000000000 | साइन=1, एक्सपोनेंट सभी 1 |
राउंड-ट्रिप रूपांतरण
using System;
public class Demo
{
public static void Main()
{
double[] testValues = { 0.0, -0.0, 1.0, -1.0, double.NaN, double.PositiveInfinity, double.NegativeInfinity, 123.456 };
foreach (var val in testValues)
{
long bits = BitConverter.DoubleToInt64Bits(val);
double restored = BitConverter.Int64BitsToDouble(bits);
bool equal = val.Equals(restored) || (double.IsNaN(val) && double.IsNaN(restored));
Console.WriteLine($"{val,15} → 0x{bits:X16} → {restored,15} {(equal ? "✓" : "✗")}");
}
}
}
मुख्य बिंदु
- बिट पैटर्न संरक्षित रहता है - कोई मान परिवर्तन नहीं
- Int64BitsToDouble() के साथ पूर्ण राउंड-ट्रिप संभव
- NaN के कई प्रतिनिधित्व होते हैं - सटीक बिट्स संरक्षित रहते हैं
- -0.0 और +0.0 के अलग बिट पैटर्न होते हैं (साइन बिट)
- सीरियलाइज़ेशन, नेटिव इंटरऑप, बिट-स्तरीय एल्गोरिदम के लिए उपयोगी