มหากาพย์ Computer Architecture ep.1 Bit (ตอนต้น)
จากสวิตซ์ เปิดๆ ปิดๆ สู่เส้นทางแห่งคอมพิวเตอร์... เคยสงสัยกันไหมว่าพวกจักรกลสมองหลอดไฟพวกนี้มันทำงานกันได้อย่างไร วันนี้ผมขอนำเสนอบทความเกี่ยวกับการทำงานของคอมพิวเตอร์ (Computer Architecture) อย่างง่ายๆ เพื่อให้เพื่อนๆพี่ๆน้องๆที่สนใจ ได้รับชมกัน ซึ่งสำหรับ ep นี้ ผมขอเล่าเรื่อง Bit ก่อนอันดับแรก มันคืออะไร? ไปลุยกันเลยยย!
Bit นั้นมาจากคำว่า Binary Digits หรือก็คือตัวเลขฐานสอง นั้นเอง (Binary, Base-2 numbers, เลขฐาน 2) ด้วยความที่เป็นตัวเลขฐานสองนั้น ทำให้ Bit สามารถมีค่าได้เพียงสองค่านั้นก็คือ 0 หรือ 1 เท่านั้น ไม่เหมือนกับ Denary (Decimal, Base-10 numbers, เลขฐานสิบ) ที่เราใช้ในชีวิตประจำวันที่สามารถมีค่าได้ 10 ตัว คือ 0, 1, 2, 3, 4, 5, 6, 7, 8 และ 9
แล้วมันเกี่ยวข้องอะไรกับคอมพิวเตอร์ล่ะ? คอมพิวเตอร์นั้นทำงานบนระบบ Digital ซึงไอ้ Digital เนี่ย มันก็คือรูปแบบการทำงานที่มีพื้นฐานมาจาก Binary นั้นเอง โดยการประมวลผล หรือ อ่านเขียนข้อมูล ด้วยตัวเลข 0 และ 1 เท่านั้น ซึ่งไอเดียนี่เนี่ยมันเกิดมาจากความต้องการบันทึกข้อมูลของคอมพิวเตอร์ โดยใช้อุปกรณ์ๆหนึ่งที่สามารถมีได้ 2 สถานะ (state) เป็นตัวเก็บข้อมูล โดยที่ "เปิด" มีค่าเท่ากับ "1" และ "ปิด" มีค่าเท่ากับ "0" แล้วไอ้เจ้าอุปกรณ์นี่เนี่ยเราก็เรียกรวมๆกันว่า สวิตซ์ (switch) เวลาเจ้าคอมพิวเตอร์มันจะเขียนข้อมูลเนี่ย มันก็จะทำการเปิดๆปิดๆ switch พวกนี้เนี่ยแหละ
แต่ถึงจะพวกนี้จะเป็นได้แค่ 0 หรือ 1 แต่อย่าดูถูกพวกมันนะเออออ...
พวกมันสามารถเก็บข้อมูลได้หลากหลายมากๆ นอกจากตัวเลข (Integer) แล้ว มันก็สามารถเก็บตัวอักษร (Text) รูปภาพ (Image) หรือ เพลง (Audio) ได้ด้วยนะ เราจะไม่ขอลงลึกละกันเอาเป็นจะยกตัวอย่างง่ายๆให้ก่อนเช่น
ตัวเลข
Decimal | Maximun Value | Minimum Bits | Binary |
0 | 2¹-1 = 1 | 1 | 0 |
8 | 2⁴-1 = 15 | 4 | 1 |
450 | 2⁹-1 = 511 | 9 | 111000010 |
1000000 | 2²⁰-1 = 1,048,575 | 20 | 11110100001001000000 |
คอมพิวเตอร์จะเก็บในรูปแบบของ Binary และเราสามารถหาจำนวนบิตที่จำนวนที่ต้องใช้เพื่อเก็บค่าที่ต้องการด้วยสมการ 2ⁿ - 1 โดยที่ผลลัพธ์จะต้องไม่น้อยกว่าค่าที่ต้องการ แล้ว n จะเท่ากับจำนวนบิตขั้นต่ำที่จำเป็นต้องใช้ตามตารางข้างต้น
เราสามารถใช้จำนวนบิตมากกว่าขั้นตำ่ที่ต้องการได้ แต่ก็จะสิ้นเปลืองหน่วยความจำเกินกว่าความจำเป็น ทางด้านการเขียนปรแกรมบางภาษา (programming language) ก็แบ่งชนิดข้อมูล (data type) ตัวเลขออกเป็นหลายชนิดเพื่อให้เหมาะสมกับขนาดของข้อมูล เช่น
Data type | Bits | Range of value |
short | 16 | -32,768 to 32,767 |
int | 32 | -2,147,483,648 to 2,147,483,647 |
long | 64 | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 |
จากตารางข้างต้นเราจะสังเกตูได้ว่า ทั้งประเภทข้อมูลทั้ง 3 ขนิดนั้น เป็นชนิดข้อมูลประเภทตัวเลขทั้งหมด แต่มีขนาดที่แตกต่างกันเพื่อให้เหมาะสมกับการใช้งาน
สมมุติว่า เราจะเขียนระบบสำหรับคิดเงินสำหรับร้านค้า ถ้าร้านนั้นเป็นร้านขายของชำทั่วไป (Grocery store) ราคาสินค้าไม่ได้สูงมากเราอาจจะเลือกใช้ตัวแปรประเภท short สำหรับเก็บราคาของสินค้าและคิดเงิน แต่ถ้าร้านเราขายดีจนขยัยขยายกลายเป็นห้าง (Mall) แล้วมูลค้าสินค้าภายในสูงขึ้น อาจจะมีของแบรนด์เนมมีราคา เราอาจจะต้องเลือกใช้ int แทน และสุดท้ายหากร้านของเราขยายไปใกลระดับโลกมีลูกค้ามากมายใช้บริการ เราก็ควรจะใช้ long แทน
โปรดติดตามตอนต่อไป...