Η μέτρηση από το μηδέν είναι μια πολύ κοινή πρακτική σε πολλές γλώσσες υπολογιστών, αλλά γιατί; Διαβάστε παρακάτω καθώς διερευνούμε το φαινόμενο και γιατί είναι τόσο διαδεδομένο.
Η σημερινή συνεδρία Ερωτήσεων & Απαντήσεων μας προσφέρει ευγενική προσφορά του SuperUser - μια υποδιαίρεση του Stack Exchange, μιας ομάδας ιστότοπων Q&A που βασίζεται στην κοινότητα.
Το ερώτημα
Ο αναγνώστης SuperUser DragonLord είναι περίεργος για το γιατί τα περισσότερα λειτουργικά συστήματα και γλώσσες προγραμματισμού μετράνε από το μηδέν. Αυτός γράφει:
Οι υπολογιστές υπολογίζουν παραδοσιακά αριθμητικές τιμές που ξεκινούν από το μηδέν. Για παράδειγμα, οι πίνακες σε γλώσσες προγραμματισμού που βασίζονται σε C ξεκινούν από το ευρετήριο μηδέν.
Ποιοι ιστορικοί λόγοι υπάρχουν για αυτό και ποια πρακτικά πλεονεκτήματα έχει η μέτρηση από το μηδέν σε σχέση με το να μετράει από το ένα;
Γιατί πράγματι; Όσο διαδεδομένη είναι η πρακτική, σίγουρα υπάρχουν πρακτικοί λόγοι για την εφαρμογή της.
Η απάντηση
Ο συνεργάτης SuperUser Matteo προσφέρει τις ακόλουθες πληροφορίες:
Η μέτρηση συστοιχιών από το 0 απλοποιεί τον υπολογισμό της διεύθυνσης μνήμης κάθε στοιχείου.
Εάν ένας πίνακας αποθηκεύεται σε μια δεδομένη θέση στη μνήμη (ονομάζεται διεύθυνση), η θέση κάθε στοιχείου μπορεί να υπολογιστεί ως
στοιχείο (n) = διεύθυνση + n * size_of_the_elementΑν θεωρήσετε το πρώτο στοιχείο το πρώτο, ο υπολογισμός γίνεται
στοιχείο (n) = διεύθυνση + (n-1) * size_of_the_elementΔεν είναι τεράστια διαφορά, αλλά προσθέτει μια περιττή αφαίρεση για κάθε πρόσβαση.
Επεξεργάστηκε για προσθήκη:
- Η χρήση του ευρετηρίου πίνακα ως μετατόπιση δεν είναι απαίτηση αλλά απλώς συνήθεια. Η μετατόπιση του πρώτου στοιχείου θα μπορούσε να κρυφτεί από το σύστημα και να ληφθεί υπόψη κατά την κατανομή και αναφορά του στοιχείου.
- Ντιζκτρά δημοσίευσε μια εφημερίδα «Γιατί η αρίθμηση πρέπει να αρχίσει στο μηδέν» ( pdf ) όπου εξηγεί γιατί η έναρξη με το 0 είναι καλύτερη επιλογή. Ξεκινώντας από το μηδέν επιτρέπει καλύτερη αναπαράσταση των ορίων.
Εάν ψάχνετε να ερευνήσετε βαθύτερα την απάντηση, το έγγραφο Dijkstra είναι μια ενημερωτική ανάγνωση.
Έχετε κάτι να προσθέσετε στην εξήγηση; Ακούστε στα σχόλια. Θέλετε να διαβάσετε περισσότερες απαντήσεις από άλλους χρήστες τεχνολογίας Stack Exchange; Δείτε ολόκληρο το νήμα συζήτησης εδώ .