কম্পিউটার টিউটোরিয়াল

C#-এ ফ্লোটিং পয়েন্ট নম্বর বাইনরিতে কনভার্ট করা

ফ্লোটিং পয়েন্ট নম্বর (float/double) বাইনরিতে কনভার্ট করা একটু জটিল কারণ IEEE 754 স্ট্যান্ডার্ড অনুযায়ী এটি সাইন, এক্সপোনেন্ট এবং ম্য্যান্টিসা (সিগনিফিকান্ড) - এই তিনটি অংশে ভাগ থাকে। নিচের উদাহরণটি শুধু পূর্ণসংখ্যা অংশের জন্য কাজ করে, পুরো ফ্লোট বাইনরি রিপ্রেজেন্টেশনের জন্য BitConverter ব্যবহার করুন।

সমস্যা: মূল উদাহরণটি অসম্পূর্ণ

মূল কোডটি শুধু পূর্ণসংখ্যা অংশ প্রসেস করে (50.5 এর জন্য 50 প্রসেস করে) এবং দশমিক অংশ উপেক্ষা করে। এছাড়া আউটপুটও ভুল।

সঠিক পদ্ধতি: BitConverter ব্যবহার (IEEE 754)

using System;

public class FloatToBinary
{
    public static void Main()
    {
        float value = 50.5f;
        
        // 4 বাইটে কনভার্ট (IEEE 754 সিঙ্গল প্রিসিশন)
        byte[] bytes = BitConverter.GetBytes(value);
        
        Console.WriteLine($"ফ্লোট মান: {value}");
        Console.WriteLine("বাইনরি রিপ্রেজেন্টেশন (৩২ বিট):");
        
        // বিট প্যাটার্ন দেখান (MSB first - বিগ ইন্ডিয়ান স্টাইল)
        for (int i = bytes.Length - 1; i >= 0; i--)
        {
            Console.Write(Convert.ToString(bytes[i], 2).PadLeft(8, '0') + " ");
        }
        Console.WriteLine();
        
        // বিট ভ্রেকডাউন
        uint bits = BitConverter.ToUInt32(bytes, 0);
        int sign = (int)(bits >> 31);
        int exponent = (int)((bits >> 23) & 0xFF);
        uint mantissa = bits & 0x7FFFFF;
        
        Console.WriteLine($"\nবিচ্ছিন্ন করলে:");
        Console.WriteLine($"সাইন বিট: {sign} ({sign == 0 ? "পজিটিভ" : "নেগেটিভ"})");
        Console.WriteLine($"এক্সপোনেন্ট: {exponent} (বায়াস: 127, রিয়েল: {exponent - 127})");
        Console.WriteLine($"ম্য্যান্টিসা: {mantissa} (হেক্স: 0x{mantissa:X})");
        
        // বাইনরি স্ট্রিং হিসেবে (সাইন | এক্সপোনেন্ট | ম্য্যান্টিসা)
        string binary = Convert.ToString(bits, 2).PadLeft(32, '0');
        Console.WriteLine($"\nপূর্ণ ৩২-বিট: {binary.Insert(1, " ").Insert(10, " ")}");
    }
}

আউটপুট (৫০.৫ এর জন্য)

ফ্লোট মান: 50.5
বাইনরি রিপ্রেজেন্টেশন (৩২ বিট):
01000010 01001010 00000000 00000000

বিচ্ছিন্ন করলে:
সাইন বিট: 0 (পজিটিভ)
এক্সপোনেন্ট: 132 (বায়াস: 127, রিয়েল: 5)
ম্য্যান্টিসা: 1310720 (হেক্স: 0x140000)

পূর্ণ ৩২-বিট: 0 10000100 10010100000000000000000

IEEE 754 সিঙ্গল প্রিসিশন (৩২ বিট) ফরম্যাট

| সাইন (১ বিট) | এক্সপোনেন্ট (৮ বিট) | ম্য্যান্টিসা (২৩ বিট) |
|      0       |     10000100      | 10010100000000000000000 |
  • সাইন: 0 = পজিটিভ, 1 = নেগেটিভ
  • এক্সপোনেন্ট: ১৩২ (বায়াস ১২৭সহ) → রিয়েল এক্সপোনেন্ট = ৫
  • ম্য্যান্টিসা: ১.১০০১০১ (ইমপ্লিসিট লিডিং ১ সহ) = ১.৫৭৮১২৫
  • মান: (-1)⁰ × ১.৫৭৮১২৫ × 2⁵ = ৫০.৫ ✓

দশমিক অংশ সহ ম্যানুয়াল কনভার্শন (শিক্ষামূলক উদ্দেশ্যে)


public static string FloatToBinaryManual(float value, int fractionalBits = 16)
{
    if (float.IsNaN(value) || float.IsInfinity(value))
        return value.ToString();
    
    bool isNegative = value < 0;
    value = Math.Abs(value);
    
    int intPart = (int)value;
    float fracPart = value - intPart;
    
    // পূর্ণসংখ্যা অংশ বাইনরি
    string intBinary = Convert.ToString(intPart, 2);
    
    // ভগ্নাংশ অংশ বাইনরি
    string fracBinary = "";
    for (int i = 0; i < fractionalBits; i++)
    {
        fracPart *= 2;
        int bit = (int)fracPart;
        fracBinary += bit.ToString();
        fracPart -= bit;
        if (fracPart == 0) break;
    }
    
    string sign = isNegative ? "-" : "";
    return fracBinary.Length > 0 
        ? $"{sign}{intBinary}.{fracBinary}" 
        : $"{sign}{intBinary}";
}

// ব্যবহার
Console.WriteLine(FloatToBinaryManual(50.5f)); // আউটপুট: 110010.1

সারসংক্ষেপ

  • বাস্তব ব্যবহারে: BitConverter.GetBytes + BitConverter.ToUInt32/ToUInt64 ব্যবহার করুন
  • শিক্ষামূলক: পূর্ণসংখ্যা এবং ভগ্নাংশ অংশ আলাদা করে বাইনরিতে কনভার্ট করুন
  • আউটপুট ফরম্যাট: IEEE 754 (৩২/৬৪ বিট) বা ফিক্সড-পয়েন্ট বাইনরি স্ট্রিং
  1. সি প্রোগ্রাম: নম্বরকে স্ট্রিং-এ রূপান্তর করা (Number to String)

  2. বাইনারি সার্চ C++ প্রোগ্রামে

  3. পাইথন প্রোগ্রাম দিয়ে দশমিক সংখ্যাকে বাইনারি নম্বরে রূপান্তর

  4. পাইথনে ফ্লোটিং পয়েন্টকে বাইনারি কনভার্ট করা