Trang chủ » làm thế nào để » Tại sao máy tính đếm từ không?

    Tại sao máy tính đếm từ không?


    Đếm từ số 0 là một thông lệ rất phổ biến trong nhiều ngôn ngữ máy tính, nhưng tại sao? Đọc tiếp khi chúng ta khám phá hiện tượng này và tại sao nó lại lan rộng như vậy.

    Phiên hỏi và trả lời hôm nay đến với chúng tôi nhờ sự hỗ trợ của SuperUser - một phân ngành của Stack Exchange, một nhóm các trang web Hỏi & Đáp do cộng đồng điều khiển.

    Câu hỏi

    Người đọ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 tính từ 0. Anh ấy viết:

    Máy tính truyền thống kiểm đếm các giá trị số bắt đầu từ số không. Ví dụ, các mảng trong ngôn ngữ lập trình dựa trên C bắt đầu từ chỉ số 0.

    Những lý do lịch sử nào tồn tại cho điều này, và những lợi thế thực tế nào khi tính từ 0 có hơn so với đếm từ một?

    Tại sao thực sự? Phổ biến như thực tế, chắc chắn có những lý do thực tế để thực hiện nó.

    Câu trả lời

    Matteo cộng tác viên SuperUser cung cấp những hiểu biết sau:

    Đếm các mảng từ 0 đơn giản hóa việc tính toán địa chỉ bộ nhớ của từng phần tử.

    Nếu một mảng được lưu trữ tại một vị trí nhất định trong bộ nhớ (được gọi là địa chỉ), vị trí của từng thành phần có thể được tính là

    phần tử (n) = địa chỉ + n * size_of_the_element 

    Nếu bạn coi phần tử đầu tiên là phần đầu tiên, tính toán sẽ trở thành

    phần tử (n) = địa chỉ + (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ỉ số mảng như một phần bù 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ể được hệ thống ẩn đi và xem xét khi phân bổ và phần tử tham chiếu.
    • Dijkstra đã xuất bản một tờ giấy Tại sao việc đánh số nên bắt đầu từ số 0 (pdf) trong đó ông giải thích tại sao bắt đầu bằng 0 là lựa chọn tốt hơn. Bắt đầu từ 0 cho phép thể hiện phạm vi tốt hơn.

    Nếu bạn đang tìm hiểu sâu hơn về câu trả lời, bài báo Dijkstra là một bài đọc thông tin.


    Có một cái gì đó để thêm vào lời giải thích? Tắt â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 am hiểu công nghệ khác? Kiểm tra chủ đề thảo luận đầy đủ ở đây.