Chuyển số nguyên dương từ cơ số 10 (thập phân) sang cơ số 8 (bát phân) bằng phép chia liên tiếp cho 8 và lấy phần dư ngược lại.
Thuật toán
- Chia số cho 8, lấy phần dư → chữ số bát phân (từ thấp đến cao).
- Thương tiếp tục chia cho 8 cho đến khi thương = 0.
- Đọc các phần dư ngược lại (từ cuối lên đầu).
Mã nguồn
using System;
class Demo {
public static void Main() {
int decVal = 40;
int quot = decVal;
int[] octalVal = new int[80];
int i = 0;
Console.WriteLine("Số thập phân: {0}", decVal);
while (quot != 0) {
octalVal[i++] = quot % 8;
quot = quot / 8;
}
Console.Write("Số bát phân: ");
for (int j = i - 1; j >= 0; j--) {
Console.Write(octalVal[j]);
}
Console.Read();
}
}
Kết quả
Số thập phân: 40
Số bát phân: 50
Kiểm tra: 5×8¹ + 0×8⁰ = 40 ✓
Cách hiện đại (Built-in)
int dec = 40;
string octal = Convert.ToString(dec, 8); // "50"
Console.WriteLine(octal);
// Ngược lại: bát phân → thập phân
int dec2 = Convert.ToInt32("50", 8); // 40
Bảng chuyển đổi nhanh
| Thập phân | Bát phân | Nhị phân |
|---|---|---|
| 0 | 0 | 000 |
| 7 | 7 | 111 |
| 8 | 10 | 1000 |
| 40 | 50 | 101000 |
| 63 | 77 | 111111 |
| 64 | 100 | 1000000 |
Lưu ý
- Code gốc dùng mảng cố định size 80 — đủ cho int 32-bit (tối đa ~11 chữ số octal).
- Xử lý riêng trường hợp
decVal == 0→ in "0". - Đối với số âm: C# dùng bù 2, chuyển đổi phức tạp hơn — thường chuyển
uinthoặc dùngConvert.ToString.