Phiên Hỏi & Đáp hôm nay đến với chúng tôi theo lịch sự của SuperUser - một phân khu của Stack Exchange, một nhóm các trang web Hỏi & Đáp do cộng đồng điều hành.
Câu hỏi
Trình đọc SuperUser DragonLord tò mò về lý do tại sao hầu hết các hệ điều hành và ngôn ngữ lập trình đều được tính từ số không. Anh ấy viết:
Computers traditionally tally numerical values starting from zero. For example, arrays in C-based programming languages start from index zero.
What historical reasons exist for this, and what practical advantages does counting from zero have over counting from one?
Tại sao thực sự? Như phổ biến như thực tế là, chắc chắn có những lý do thực tế để thực hiện nó.
Câu trả lời
Người đóng góp Superuser Matteo cung cấp những thông tin chi tiết sau đây:
Counting arrays from 0 simplifies the computation of the memory address of each element.
If an array is stored at a given position in memory (it’s called the address) the position of each element can be computed as
element(n) = address + n * size_of_the_element
Nếu bạn coi yếu tố đầu tiên là phần tử đầu tiên, thì tính toán sẽ trở thành
element(n) = address + (n-1) * size_of_the_element
Không phải là một sự khác biệt lớn nhưng nó thêm một phép trừ không cần thiết cho mỗi lần truy cập.
Đã chỉnh sửa để thêm:
- Việc sử dụng chỉ mục mảng như một sự bù đắp không phải là một yêu cầu mà chỉ là một thói quen. Phần bù của phần tử đầu tiên có thể bị ẩn bởi hệ thống và được xem xét khi phân bổ và tham chiếu phần tử.
- Dijkstra đã xuất bản một bài báo “Tại sao đánh số nên bắt đầu từ số không” (pdf), nơi ông giải thích tại sao bắt đầu bằng 0 là một lựa chọn tốt hơn. Bắt đầu từ số không cho phép một đại diện tốt hơn của dãy.
Nếu bạn muốn tìm hiểu sâu hơn về câu trả lời, bài viết Dijkstra là một thông tin đọc.
Có cái gì để thêm vào lời giải thích? Âm thanh trong các ý kiến. Bạn muốn đọc thêm câu trả lời từ những người dùng Stack Exchange có hiểu biết công nghệ khác? Xem toàn bộ chuỗi thảo luận tại đây.