Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

บวกเลขฐานสอง (Binary Addition) ใน C#

ภาพรวม

บวกเลขฐานสองโดยจัดการเป็นตัวเลข decimal ที่ประกอบด้วยตัวเลข 0 และ 1 เท่านั้น แล้วทำการบวกแบบ manual digit-by-digit พร้อม carry

โค้ดตัวอย่าง


using System;

class Demo {
    public static void Main() {
        long val1 = 11110; // binary representation as decimal number
        long val2 = 11100;

        Console.WriteLine($"Binary one: {val1}");
        Console.WriteLine($"Binary two: {val2}");

        long sum = AddBinary(val1, val2);
        Console.WriteLine($"Sum = {sum}");
    }

    static long AddBinary(long val1, long val2) {
        long i = 0, rem = 0, res = 0;
        long[] sum = new long[64]; // รองรับ 64 bits

        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;

        // สร้างผลลัพธ์ (reverse array)
        i--;
        while (i >= 0) {
            res = res * 10 + sum[i--];
        }
        return res;
    }
}

ผลลัพธ์


Binary one: 11110
Binary two: 11100
Sum = 111010

ตรวจสอบความถูกต้อง

  • 11110₂ = 30₁₀
  • 11100₂ = 28₁₀
  • 30 + 28 = 58₁₀
  • 111010₂ = 32+16+8+2 = 58₁₀ ✓

วิธีที่ทันสมัยและถูกต้องกว่า: ใช้ Convert.ToString/Convert.ToInt32


static string AddBinaryProper(string bin1, string bin2) {
    // แปลง binary string เป็น int
    int n1 = Convert.ToInt32(bin1, 2);
    int n2 = Convert.ToInt32(bin2, 2);

    // บวกใน decimal
    int sum = n1 + n2;

    // แปลงกลับเป็น binary string
    return Convert.ToString(sum, 2);
}

// ใช้งาน
string result = AddBinaryProper("11110", "11100");
Console.WriteLine(result); // 111010

สำหรับเลขใหญ่: ใช้ BigInteger


using System.Numerics;

static string AddBinaryBig(string bin1, string bin2) {
    BigInteger n1 = 0, n2 = 0;
    foreach (char c in bin1) { n1 = n1 * 2 + (c - '0'); }
    foreach (char c in bin2) { n2 = n2 * 2 + (c - '0'); }
    BigInteger sum = n1 + n2;

    // แปลงกลับ binary
    if (sum == 0) return "0";
    string result = "";
    while (sum > 0) {
        result = (sum % 2) + result;
        sum /= 2;
    }
    return result;
}

สรุป

  • วิธี manual digit-by-digit: เข้าใจหลักการ แต่ error-prone และจำกัดขนาด
  • ใช้ Convert.ToInt32(str, 2) และ Convert.ToString(num, 2) สำหรับกรณีทั่วไป
  • ใช้ BigInteger สำหรับเลขฐานสองขนาดใหญ่ (มากกว่า 64 bits)