Chuyển số nguyên dương từ cơ số 10 sang cơ số 2 bằng phép chia liên tiếp cho 2, lấy phần dư (0 hoặc 1) đọc ngược lại.
Thuật toán
- Chia
ncho 2, lấy phần dưn % 2(0 hoặc 1). - Cập nhật
n = n / 2. - Lặp cho đến khi
n == 0. - Đọc các phần dư ngược lại (từ cuối lên đầu).
Mã nguồn
using System;
namespace Demo {
class MyApplication {
static void Main(string[] args) {
int decVal = 34;
Console.WriteLine("Thập phân: {0}", decVal);
string binary = "";
while (decVal >= 1) {
binary = (decVal % 2) + binary; // Nối vào ĐẦU chuỗi
decVal /= 2;
}
Console.WriteLine("Nhị phân: {0}", binary);
Console.Read();
}
}
}
Kết quả
Thập phân: 34
Nhị phân: 100010
Kiểm tra: 1×32 + 0×16 + 0×8 + 0×4 + 1×2 + 0×1 = 34 ✓
Cách hiện đại (Built-in)
int n = 34;
string binary = Convert.ToString(n, 2); // "100010"
// Có padding độ dài cố định (vd: 8 bit)
string binary8 = Convert.ToString(n, 2).PadLeft(8, '0'); // "00100010"
// Ngược lại: nhị phân → thập phân
int dec = Convert.ToInt32("100010", 2); // 34
Lưu ý
- Code gốc dùng chuỗi
alưu phần dư theo thứ tự ngược, sau đó đảo lại bằng vòng lặp — phức tạp không cần thiết. Cách đơn giản:binary = (n%2) + binary(nối vào đầu). - Xử lý riêng
n == 0→ trả về "0". Convert.ToString(n, 2)xử lý số âm theo bù 2 (32-bit).- Để format nhị phân đẹp:
string.Join(" ", binary.Chunk(4).Select(c => new string(c)))→ "0010 0010".