ในระบบคอมพิวเตอร์ ตัวเลขฐานสอง (Binary) ใช้ฐาน 2 ส่วนตัวเลขฐานแปด (Octal) ใช้ฐาน 8 ทั้งสองระบบมีความสัมพันธ์ใกล้ชิดกัน เพราะ 23 = 8 ทำให้การแปลงระหว่างกันสะดวก
ตารางเปรียบเทียบ Binary และ Octal
| เลขฐานสอง (Binary) | เลขฐานแปด (Octal) |
|---|---|
| 01010 | 12 |
| 00111 | 7 |
| 11001 | 31 |
| 10000 | 20 |
โค้ดโปรแกรมแปลงสองทาง (Binary ↔ Octal)
#include <iostream>
#include <cmath>
using namespace std;
// Binary → Octal
int BinaryToOctal(int binaryNum) {
int octalNum = 0, decimalNum = 0, count = 0;
while(binaryNum != 0) {
decimalNum += (binaryNum % 10) * pow(2, count);
++count;
binaryNum /= 10;
}
count = 1;
while (decimalNum != 0) {
octalNum += (decimalNum % 8) * count;
decimalNum /= 8;
count *= 10;
}
return octalNum;
}
// Octal → Binary
int OctalToBinary(int octalNum) {
int decimalNum = 0, binaryNum = 0, count = 0;
while(octalNum != 0) {
decimalNum += (octalNum % 10) * pow(8, count);
++count;
octalNum /= 10;
}
count = 1;
while (decimalNum != 0) {
binaryNum += (decimalNum % 2) * count;
decimalNum /= 2;
count *= 10;
}
return binaryNum;
}
int main() {
int binaryNum = 1011, octalNum = 25;
cout << "Binary to Octal" << endl;
cout << "Binary number: " << binaryNum << endl;
cout << "Octal number: " << BinaryToOctal(binaryNum) << endl;
cout << "Octal to Binary" << endl;
cout << "Octal number: " << octalNum << endl;
cout << "Binary number: " << OctalToBinary(octalNum) << endl;
return 0;
}
ผลลัพธ์
Binary to Octal Binary number: 1011 Octal number: 13 Octal to Binary Octal number: 25 Binary number: 10101
หลักการทำงาน
ทั้งสองฟังก์ชันใช้วิธีเดียวกัน คือ แปลงเป็น Decimal ก่อน (ฐาน 10) แล้วค่อยแปลงไปยังฐานเป้าหมาย:
BinaryToOctal(): Binary → Decimal → OctalOctalToBinary(): Octal → Decimal → Binary
วิธีนี้เข้าใจง่ายและใช้ได้กับฐานอื่นๆ ด้วย