Chuyển số nhị phân (dạng số nguyên int, ví dụ 101) sang thập phân bằng cách nhân từng bit với lũy thừa của 2 theo vị trí.
Thuật toán
- Duyệt từ phải sang trái (bit thấp → cao).
- Bit tại vị trí
i(từ 0) có trọng số2^i. - Tổng:
decimal = Σ (bit_i × 2^i).
Mã nguồn
using System;
namespace Demo {
class MyApplication {
static void Main(string[] args) {
int num = 101; // Nhị phân: 1 0 1
int binVal = num;
int decVal = 0;
int baseVal = 1; // 2^0
while (num > 0) {
int rem = num % 10; // Lấy bit cuối (0 hoặc 1)
decVal += rem * baseVal; // Cộng vào kết quả
num /= 10; // Bỏ bit cuối
baseVal *= 2; // Tăng lũy thừa 2
}
Console.WriteLine("Nhị phân: " + binVal);
Console.WriteLine("Thập phân: " + decVal);
Console.ReadLine();
}
}
}
Kết quả
Nhị phân: 101
Thập phân: 5
Cách hiện đại (Built-in)
// Chuỗi nhị phân → int
string binaryStr = "101";
int dec = Convert.ToInt32(binaryStr, 2); // 5
// int → chuỗi nhị phân
string bin = Convert.ToInt32(5).ToString(); // "101" - SAI!
// Đúng:
string bin = Convert.ToString(5, 2); // "101"
Lưu ý
- Code gốc nhận input là
int(101) — chỉ phù hợp cho nhị phân ngắn (≤ 10 chữ số, vì int max ~2 tỷ). - Nhị phân dài (64-bit) → dùng
stringinput +Convert.ToInt64(str, 2). - Không validate input: nếu nhập
102(có chữ số 2) → kết quả sai. Nên kiểm trastr.All(c => c=='0' || c=='1'). - Với số âm (bù 2): logic phức tạp hơn, dùng
Convert.ToInt32với chuỗi 32-bit.