Đây là một câu hỏi mà tôi đã tự hỏi (và được hỏi) trong một thời gian dài.
Trong (hầu hết? Tất cả?) Ngôn ngữ lập trình, một chỉ mục bắt đầu từ 0 cho một mảng, chuỗi, v.v. Tôi nhận ra nó trở thành quy ước theo thời gian, được chấp nhận bằng nhiều ngôn ngữ, nhưng ai cũng có thể chỉ ra nguồn gốc của điều này?
Tôi nghĩ, có lẽ, nó phải làm với tất cả bắt nguồn từ nhị phân. Nhưng tôi không chắc chắn về ý tưởng mang đến sự cần thiết trong hệ thống thập phân - tại sao không bắt đầu một chỉ mục từ 1?
Có ai có kiến thức lịch sử về ngôn ngữ lập trình trong đó quyết định bắt đầu lập chỉ mục ở mức 0 có thể được giải thích không?
Cảm ơn bạn!
EDIT: Các tác phẩm của Dijkstra hữu ích hơn nữa từ quan điểm toán học, nhưng ngay cả ông cũng lưu ý, không phải tất cả các ngôn ngữ đều được lập chỉ mục bằng không. Giải thích của WBT cũng có lý do tại sao một người sẽ bắt đầu bằng 0 dựa trên địa chỉ bộ nhớ. (Tôi biết một số ngôn ngữ xử lý lập chỉ mục hơi khác nhau dựa trên thao tác mảng.)
Tôi không nhất thiết phải tìm kiếm lý do tại sao (điều mà tôi rất đánh giá cao vì nó giúp hiểu thêm) nhưng nhiều hơn nữa khi điều này trở thành quy ước và / hoặc liệu nó có thể được truy tìm đến một ngôn ngữ cụ thể.
Vì vậy, ví dụ trong K & R's C, khi thảo luận về chỉ mục mảng, K hoặc R thực tế giải thích, "Các chỉ số mảng luôn bắt đầu từ 0 trong C ..." (trang 22) Sau đó, khi thảo luận về một hàm để xử lý ký tự mảng, "... một thiết kế hữu ích hơn sẽ trả về độ dài của dòng hoặc bằng 0 nếu gặp phải cuối tệp. Zero là trả về cuối tệp có thể chấp nhận được vì nó không bao giờ là độ dài dòng hợp lệ." (trang 127)
Dựa trên K & R, tôi tập hợp a) quy ước được thông qua từ nơi khác, vì vậy C không phải là nguồn cảm hứng cho việc lập chỉ mục bằng 0 và b) có thể có những lý do sâu xa hơn cho việc sử dụng nó dựa trên ví dụ thứ hai. Tôi biết K & R được đánh giá cao về văn xuôi rõ ràng, vì vậy đó là một lý do khác mà tôi đưa nó vào, để đưa ra một ví dụ về những gì tôi đã hy vọng một ngôn ngữ tài liệu khác sẽ làm để giải thích lý do đằng sau việc lập chỉ mục bằng không.
Tôi nghĩ rằng cả WBT và btilly đều đưa ra những lý do tốt như nhau; Tôi tự hỏi liệu có ai biết những ngôn ngữ cũ (tiền C?) Đã ghi lại quyết định thiết kế không. Và đồng thời tôi nhận ra thông tin như vậy có thể không tồn tại.