বাইনরি সংখ্যা যোগ করার জন্য বিটওয়াইজ অপারেশন বা ম্যানুয়াল বাইনরি অ্যাসিশন ব্যবহার করা যায়। নিচে দুটি পদ্ধতি দেখানো হলো।
পদ্ধতি ১: ম্যানুয়াল বাইনরি অ্যাসিশন (স্ট্রিং/লং আকারে)
এই পদ্ধতিতে বাইনরি সংখ্যাকে লং ইন্টিজার হিসেবে ট্রিট করে ডিজিট বাই ডিজিট যোগ করা হয়।
using System;
class Demo
{
public static void Main(string[] args)
{
long val1 = 11110; // বাইনরি ১১১১০ = ডেসিমেল ৩০
long val2 = 11100; // বাইনরি ১১১০০ = ডেসিমেল ২৮
Console.WriteLine($"বাইনরি এক: {val1}");
Console.WriteLine($"বাইনরি দুই: {val2}");
long sum = AddBinary(val1, val2);
Console.WriteLine($"যোগফল (বাইনরি): {sum}"); // ১১১০১০ = ডেসিমেল ৫৮
}
static long AddBinary(long val1, long val2)
{
long i = 0, rem = 0, res = 0;
long[] sum = new long[64]; // ৬৪ বিট পর্যন্ত সাপোর্ট
while (val1 != 0 || val2 != 0)
{
// বর্তমান বিট + ক্যারি
sum[i++] = (val1 % 10 + val2 % 10 + rem) % 2;
rem = (val1 % 10 + val2 % 10 + rem) / 2;
val1 /= 10;
val2 /= 10;
}
if (rem != 0) sum[i++] = rem;
// রিভার্স করে রেজাল্ট বানান
i--;
while (i >= 0)
res = res * 10 + sum[i--];
return res;
}
}
আউটপুট
বাইনরি এক: 11110
বাইনরি দুই: 11100
যোগফল (বাইনরি): 111010
পদ্ধতি ২: বিটওয়াইজ অপারেশন (দ্রুত এবং সঠিক)
আসল বাইনরি অপারেশন (নন-স্ট্রিং) দ্রুত এবং এরর-প্রুফ।
public static int AddBinaryBitwise(int a, int b)
{
while (b != 0)
{
int carry = a & b; // ক্যারি বের করুন (AND)
a = a ^ b; // যোগ করুন ক্যারি ছাড়া (XOR)
b = carry << 1; // ক্যারি লেফট শিফট
}
return a;
}
// ব্যবহার
int bin1 = 0b11110; // ৩০
int bin2 = 0b11100; // ২৮
int sum = AddBinaryBitwise(bin1, bin2); // ৫৮
Console.WriteLine(Convert.ToString(sum, 2)); // 111010
পদ্ধতি ৩: বাইনরি স্ট্রিং যোগ (বড় সংখ্যার জন্য)
public static string AddBinaryStrings(string a, string b)
{
int i = a.Length - 1, j = b.Length - 1, carry = 0;
var result = new System.Text.StringBuilder();
while (i >= 0 || j >= 0 || carry > 0)
{
int sum = carry;
if (i >= 0) sum += a[i--] - '0';
if (j >= 0) sum += b[j--] - '0';
result.Insert(0, sum % 2);
carry = sum / 2;
}
return result.ToString();
}
// ব্যবহার
string s1 = "11110";
string s2 = "11100";
Console.WriteLine(AddBinaryStrings(s1, s2)); // 111010
বাইনরি স্ট্রিং ↔ ইন্টিজার কনভার্শন
// স্ট্রিং → ইন্ট (বাইনরি পার্স)
int val = Convert.ToInt32("11110", 2); // 30
// ইন্ট → বাইনরি স্ট্রিং
string binary = Convert.ToString(30, 2); // "11110"
// প্যাডিংসহ (৮ বিট)
string padded = Convert.ToString(30, 2).PadLeft(8, '0'); // "00011110"
তুলনামূলক সারসংক্ষেপ
| পদ্ধতি | প্রকার | সীমাবদ্ধতা | ব্যবহার |
|---|---|---|---|
| ম্যানুয়াল (লং) | দশমিক ডিজিট বাইনরি | ৬৪ বিট পর্যন্ত, ধীর | শিক্ষামূলক |
| বিটওয়াইজ (ইন্ট) | আসল বাইনরি | ৩২/৬৪ বিট, দ্রুততম | সাধারণ ব্যবহার |
| স্ট্রিং বেসড | অনলিমিটেড সাইজ | ধীর, মেমরি বেশি | বড় বাইনরি স্ট্রিং |
গুরুত্বপূর্ণ নোট
মূল উদাহরণেval1 = 11110লিখলে C# এটাকে ডেসিমেল ১১১১০ মনে করে, বাইনরি ১১১১০ নয়। বাইনরি লিটারেল লিখতে0b11110(C# 7.0+) ব্যবহার করুন।