ทำไมคอมพิวเตอร์นับจากศูนย์
การนับจากศูนย์เป็นวิธีปฏิบัติที่ใช้กันทั่วไปในหลายภาษาของคอมพิวเตอร์ แต่ทำไม อ่านต่อไปเมื่อเราสำรวจปรากฏการณ์และทำไมมันจึงแพร่หลาย.
เซสชั่นคำถามและคำตอบในวันนี้มาถึงเราด้วยความอนุเคราะห์จาก SuperUser - แผนกย่อยของ Exchange Exchange ซึ่งเป็นกลุ่มที่ขับเคลื่อนด้วยชุมชนของเว็บไซต์ถาม - ตอบ.
คำถาม
ผู้อ่าน SuperUser DragonLord อยากรู้ว่าทำไมระบบปฏิบัติการและภาษาโปรแกรมส่วนใหญ่นับจากศูนย์ เขาเขียน:
คอมพิวเตอร์มักจะมีค่าตัวเลขเริ่มต้นจากศูนย์ ตัวอย่างเช่นอาร์เรย์ในภาษาการเขียนโปรแกรม C-based เริ่มต้นจากดัชนีศูนย์.
เหตุผลทางประวัติศาสตร์ที่มีอยู่สำหรับเรื่องนี้และสิ่งที่ได้เปรียบในทางปฏิบัตินับจากศูนย์มีมากกว่าการนับจากที่หนึ่ง?
ทำไมเหรอ? อย่างกว้างขวางเช่นเดียวกับการฝึกปฏิบัติแน่นอนว่ามีเหตุผลเชิงปฏิบัติสำหรับการนำไปปฏิบัติ.
คำตอบ
ผู้สนับสนุน SuperUser Matteo เสนอข้อมูลเชิงลึกดังต่อไปนี้:
การนับอาร์เรย์จาก 0 ช่วยให้การคำนวณที่อยู่หน่วยความจำของแต่ละองค์ประกอบง่ายขึ้น.
หากอาร์เรย์ถูกเก็บไว้ที่ตำแหน่งที่กำหนดในหน่วยความจำ (เรียกว่าที่อยู่) ตำแหน่งของแต่ละองค์ประกอบสามารถคำนวณได้ดังนี้
องค์ประกอบ (n) = ที่อยู่ + n * size_of_the_element
หากคุณพิจารณาองค์ประกอบแรกเป็นอันดับแรกการคำนวณจะกลายเป็น
องค์ประกอบ (n) = ที่อยู่ + (n-1) * size_of_the_element
ไม่แตกต่างกันมาก แต่เพิ่มการลบที่ไม่จำเป็นสำหรับการเข้าถึงแต่ละครั้ง.
แก้ไขเพื่อเพิ่ม:
- การใช้ดัชนีอาร์เรย์เป็นอ็อฟเซ็ตไม่ใช่ข้อกำหนด แต่เป็นเพียงนิสัย ระบบสามารถซ่อนออฟเซ็ตขององค์ประกอบแรกและนำมาพิจารณาเมื่อทำการจัดสรรและอ้างอิงองค์ประกอบ.
- Dijkstra ตีพิมพ์บทความ“ ทำไมการนับเลขควรเริ่มต้นที่ศูนย์” (pdf) ซึ่งเขาอธิบายว่าทำไมการเริ่มต้นด้วย 0 จึงเป็นทางเลือกที่ดีกว่า การเริ่มต้นที่ศูนย์จะช่วยให้แสดงช่วงได้ดีขึ้น.
หากคุณต้องการเจาะลึกลงไปในคำตอบกระดาษ Dijkstra เป็นการอ่านที่ให้ข้อมูล.
มีสิ่งที่จะเพิ่มคำอธิบายหรือไม่ ปิดเสียงในความคิดเห็น ต้องการอ่านคำตอบเพิ่มเติมจากผู้ใช้ Stack Exchange คนอื่นหรือไม่ ลองอ่านหัวข้อสนทนาเต็มได้ที่นี่.