สำหรับวิธีการนี้จะมีขั้นตอนดังนี้
- รับตัวเลขฐานแปดเข้ามา
- อ่านเลขฐานแปดที่ละตัวจากด้านขวามือ(LSB) มองว่าเลขฐานแปดแต่ละตัวนั้นเป็นเลขฐานสิบ
- นำเข้าไปแปลงจากเลขฐานสิบเป็นฐานสอง
- เก็บค่าลงสแตกตามลำดับ
- กลับไปทำขั้นตอนที่ 2 จนกว่าจะแปลงเลขฐานแปดครบทุกตัว
- แสดงค่าทั้งหมดในสแตกก็จะได้การแปลงเลขฐานแปดเป็นเลขฐานสอง
ตัวอย่างเช่น
เลขฐานแปด คือ 416
ทำตามขั้นตอนด้านบนจะได้ว่า
- รอบที่ 1 พิจารณา 6 สามารถแปลงเป็นเลขฐานสองได้เป็น 110 ก็จะถูกเก็บในสแตกดังนี้
- จากนั้นทำการแสดงค่าทั้งหมดในสแตกก็จะได้ผลลัพธ์เป็น 100001110
วิธีการเขียนโค๊ดคือ
- ไฟล์ Node.java คือการกำหนดว่าจะให้แต่ละโหนดเก็บค่าอะไร ในที่นี้ก็จะให้เก็บค่าเป็น integer
- ไฟล์ Stack.java คือการสร้างเมธอดต่างๆ ที่สำคัญของการใช้สแตก
- ไฟล์ ConvertOctalToBinary.java คือไฟล์สำหรับทำตามกระบวนการด้านบน
ไฟล์ ConvertOctalToBinary.java มีโค๊ดดังนี้
public static void main(String... args) {
Stack stack = new Stack();
String octal = "416";
for (int i = octal.length() - 1; i >= 0; i--) {
char facOctNumChar = octal.charAt(i);
String facOctNumStr = String.valueOf(facOctNumChar);
int number = Integer.parseInt(facOctNumStr);
// int number = Integer.parseInt(String.valueOf(octal.charAt(i)));
int countBit = 0;
while (number > 0) {
int bit = number % 2;
stack.push(bit);
number = number / 2;
countBit++;
}
if (countBit < 3) {
for (int j = countBit; j < 3; j++) {
stack.push(0);
}
}
}
System.out.print("Octal number is " + octal + " convert to binary number is ");
while (!stack.isEmptyStack()) {
try {
System.out.print(stack.peek());
stack.pop();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
}
อธิบายโค๊ด
- เมื่อเริ่มต้น for loop ก็จะพิจารณาตัวเลขฐานแปดที่ละตัวแล้วจับโยนเข้าไปที่ while loop เพื่อหาว่าเป็นเลขฐานสองคืออะไร
- จากนั้นนำเลขที่ได้ใส่ในสแตกที่เตรียมไว้ จนจบ while loop
- จากนั้นถามว่าในลูปที่ผ่านมาใส่ค่าในสแตกครบ 3 ค่าหรือยัง ทำไมต้อง 3 ค่า?
- เพราะว่าในการเก็บค่าเลขฐานแปดให้อยู่ในรูปของเลขฐานสองนั้น ต้องใช้เลขฐานสอง 3 bit ดังนั้นจึงต้องตรวจสอบว่าครบ 3 ค่าหรือยัง นั่นก็คือครบ 3 bit หรือยังนั่นเอง หากยังไม่ครบก็จะเติม bit 0 ให้ครบ 3 bit
- เมื่อทำไปเรื่อยๆ จนหลุดจาก for loop ก็จะสาแสดงค่าทั้งหมดที่อยู่ในสแตก ก็จะได้ผลลัพธ์ที่สวยงาม
ถามว่ายังมีวิธีอื่นอีกมั้ย ตอบได้ว่ามีครับ อีกวิธีการหนึ่งที่คล้ายๆกันคือ คล้ายกันตรงที่จะแปลงเลขฐานสิบเป็นฐานสอง แต่ไม่ได้แปลงทีละตัวอย่างที่แสดงให้ดูในตอนต้น แต่จะแปลงเลขก้อนเดียวเดียวจบได้เลขฐานแปดในรูปแบบเลขฐานสองเลย วิธีการคือ
- รับตัวเลขฐานแปดเข้ามา
- อ่านเลขฐานแปดทีละตัวจากด้านขวามือ(LSB) จากนั้นทำการแปลงเลขฐานแปดให้เป็นเลขฐานสิบโดยใช้ค่าประจำหลักของเลขฐานแปด
- บวกสะสมค่าที่ได้จากการแปลงเป็นเลขฐานสิบ
- นำเลขฐานสิบที่ได้ไปแปลงเป็นเลขฐานสองอีกครั้ง
- ก็จะได้ผลลัพธ์ที่ต้องการ
หมายเหตุ อาจจะได้ผลลัพธ์ไม่เหมือนวิธีด้านบนทั้งหมด เพราะอาจจะมีการแปลงบางค่าที่ได้จำนวน bit ไม่ครบ 3 bit
ตัวอย่างเช่น
เลขฐานแปด คือ 416
แปลงเป็นเลขฐานสิบโดยใช้ค่าประจำหลักจะได้เป็น
(6 * 8^0)+(1 * 8^1)+(4 * 8^2) = 6 + 8 + 256 = 270
จากนั้นแปลงเลข 270 ที่เป็นเลขฐานสิบให้เป็นเลขฐานสอง จะได้ผลลัพธ์เป็น 100001110
ผลลัพธ์ที่ได้จากทั้งสองวิธีได้เท่ากัน แล้วแต่จะเลือกวิธีการที่ชอบ
หวังว่าคงจะเป็นประโยชน์นะครับ
ดาวน์โหลดโค๊ดเต็มได้ที่นี่