Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C#

C# में BitConverter.DoubleToInt64Bits() मेथड - डबल को 64-बिट इंटीजर में बदलें

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.00x0000000000000000सभी बिट्स शून्य
-0.00x8000000000000000केवल साइन बिट सेट
1.00x3FF0000000000000एक्सपोनेंट = 1023 (बायस)
NaN0x7FF8000000000000*एक्सपोनेंट सभी 1, मेंटिसा ≠ 0
+Infinity0x7FF0000000000000एक्सपोनेंट सभी 1, मेंटिसा = 0
-Infinity0xFFF0000000000000साइन=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 के अलग बिट पैटर्न होते हैं (साइन बिट)
  • सीरियलाइज़ेशन, नेटिव इंटरऑप, बिट-स्तरीय एल्गोरिदम के लिए उपयोगी
  1. - C# में Aggregate() मेथड का उपयोग

    C# में Aggregate() मेथड का उपयोग किसी अनुक्रम पर संचयी संक्रिया (cumulative operation) करने के लिए किया जाता है। यह गणितीय संक्रियाओं जैसे योग (Sum), न्यूनतम (Min), अधिकतम (Max), औसत (Average), गुणनफल (Product) आदि के लिए उपयोगी है। उदाहरण: सरणी के तत्वों का गुणनफल मान लीजिए हमारे पास निम्न सरणी ह

  1. - C# में TakeWhile() मेथड का उपयोग

    C# में TakeWhile() मेथड System.Linq नेमस्पेस का एक एक्सटेंशन मेथड है जो किसी अनुक्रम से तब तक तत्व लौटाता है जब तक कि निर्दिष्ट शर्त (predicate) सत्य रहती है। जैसे ही शर्त असत्य होती है, तत्वों को लेना बंद कर दिया जाता है। उदाहरण मान लीजिए हमारे पास निम्न सरणी है: int[] arr = { 25, 40, 65, 70 };

  1. - C# में GroupBy() विधि

    GroupBy() एक एक्सटेंशन विधि है जो दिए गए संग्रह से कुछ कुंजी मान के आधार पर तत्वों का एक समूह लौटाती है। निम्न हमारी सरणी है: int[] arr = { 2, 30, 45, 60, 70 }; अब, हम 50 से छोटे तत्वों को समूहित करने के लिए GroupBy() का उपयोग करेंगे: chkSmaller(b)); उपरोक्त chkSmaller() 50 से छोटे तत्वों को ढूंढता