ภาพรวม
ทำการบวกเลขฐานสองโดยตรงใน Main method โดยไม่แยกเป็นเมธอดแยกต่างหาก ใช้ Logic เหมือนกันกับการบวกแบบ Manual
โค้ดตัวอย่าง
using System;
class Demo {
public static void Main(string[] args) {
long val1 = 11010; // binary as decimal digits
long val2 = 10100;
Console.WriteLine($"Binary one: {val1}");
Console.WriteLine($"Binary two: {val2}");
long i = 0, rem = 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;
Console.Write("Sum = ");
i--;
while (i >= 0) {
Console.Write(sum[i--]);
}
Console.WriteLine();
}
}
ผลลัพธ์
Binary one: 11010
Binary two: 10100
Sum = 101110
ตรวจสอบความถูกต้อง
- 11010₂ = 26₁₀
- 10100₂ = 20₁₀
- 26 + 20 = 46₁₀
- 101110₂ = 32+8+4+2 = 46₁₀ ✓
วิธีที่แนะนำ (Standard Approach)
using System;
string bin1 = "11010";
string bin2 = "10100";
// แปลงเป็น integer
int n1 = Convert.ToInt32(bin1, 2); // 26
int n2 = Convert.ToInt32(bin2, 2); // 20
// บวก
int sum = n1 + n2; // 46
// แปลงกลับ binary string
string result = Convert.ToString(sum, 2); // "101110"
Console.WriteLine($"{bin1} + {bin2} = {result}");
สำหรับเลขใหญ่: BigInteger
using System.Numerics;
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;
// Convert back to binary string
string result = "";
while (sum > 0) {
result = (sum % 2) + result;
sum /= 2;
}
Console.WriteLine(result);
สรุป
- วิธี Manual: เข้าใจหลักการ แต่ error-prone, จำกัดขนาด (long max 19 digits)
- วิธี Convert: สะดวก เร็ว ถูกต้อง รองรับ 32-bit
- BigInteger: ไม่จำกัดขนาด เหมาะสำหรับ binary string ยาวมาก