Αναπαράσταση Δεδομένων ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική
Αναπαράσταση δεδομένων Κατάλληλη συμβολική αναπαράσταση δεδομένων, για απλοποίηση βασικών πράξεων, όπως πρόσθεση Πόσο εύκολο είναι να προσθέσουμε 2 Ρωμαϊκούς αριθμούς; υλοποίησης υλικού (για ταχύτητα, αξιοπιστία, οικονομία) Οι υπολογιστές είναι γενικής χρήσης δυνατότητα αναπαράστασης για κάθε είδος δεδομένων 2
Το δυφίο(!) aka bit Ακρώνυμο για δυαδικό ψηφίο (binary digit) Η μικρότερη ποσότητα χρήσιμης πληροφορίας πρέπει να υπάρχουν τουλάχιστον δύο πιθανές τιμές Μπορεί να αναπαραστήσει οτιδήποτε. Πώς; χρησιμοποιώντας πολλά μαζί, όπως τα γράμματα φτιάχνουν λέξεις, προτάσεις,... Πλεονεκτήματα: εύκολο για αριθμητικές πράξεις, απλά, αξιόπιστα κυκλώματα Μειονεκτήματα: πολύ λίγη πληροφορία χρειαζόμαστε πολλά για οποιοδήποτε χρήσιμο υπολογισμό 3
Φυσικοί αριθμοί Αναπαράσταση φυσικών («απρόσημων ακεραίων») αριθμών με θεσιακό σύστημα. Πιο σημαντικό bit most significant bit Θέση bit Δυαδικός αριθμός MSB n-1 Λιγότερο σημαντικό bit LSB least significant bit n-2 1 0 Δεκαδικός: *2 n-1 + *2 n-2 + *2 1 + *2 0 4
Απλές πράξεις Όπως στο δεκαδικό σύστημα προσοχή κανένα ψηφίο δεν μπορεί να είναι πάνω από 1! 13 1 1 1 1 01101 +01011 11000 24 11 0 0 1 0 01101 01011 00010 2 5
Αριθμητική με σταθερό μήκος bits Το υλικό δεν μπορεί να κάνει πράξεις με αριθμούς με οποιοδήποτε «μήκος» σε bits Υπάρχουν τύποι δεδομένων σταθερού μήκους, όπως byte = 8bits. κληρονομιά από τον IBM 360 λέξη (word) ο έμφυτος τύπος δεδομένων. Συνήθως 32 bits Υπερχείλιση (overflow) συμβαίνει όταν ένα αποτέλεσμα δεν χωράει Οι αριθμοί ξαναρχίζουν από την αρχή. Π.χ. 256 γίνεται 0 σε ένα byte Αγνοείται από κάποιες γλώσσες προγραμματισμού (π.χ. C), άλλες προκαλούν διακοπή εκτέλεσης 6
Αντιμετώπιση υπερχείλισης Επιλογή κατάλληλου μεγέθους (τύπου) μεταβλητών για το πρόγραμμα π.χ. ξέρουμε το μέγιστο αριθμό μιας μεταβλητής επανάληψης Εξαιρετικά σπάνιο: υπάρχουν μεταβλητές 64 ή 128bit 64 bit, μέγιστος αριθμός 2 64-1 = 18.446.744.073.709.551.615 Γιατί κάθε μεταβλητή δεν είναι 64/128bit; Οικονομία μνήμης, ταχύτητα Αν δεν είναι γνωστό από πριν πόσο μεγάλες τιμές μπορεί να πάρει μια μεταβλητή ειδικές «βιβλιοθήκες» (έτοιμα υποπρογράμματα) δίνουν απεριόριστους αριθμούς αλλά οι πράξεις είναι πολύ πιο αργές 7
Αρνητικοί αριθμοί Δεν υπάρχουν διαθέσιμα σύμβολα όπως +, - χρειάζεται κάποιου είδους κωδικοποίηση Αναπαράσταση προσήμου μέτρου (sign-magnitude) Το αριστερότερο (πιο σημαντικό) bit είναι το πρόσημο 1 σημαίνει αρνητικός αριθμός 0 σημαίνει θετικός Πως γίνονται οι πράξεις; Υπάρχει καλύτερος τρόπος; 8
Συμπλήρωμα ως προς 2 Αγγλικός όρος: 2 s complement Ποιό είναι το αποτέλεσμα 000 001? 111 Το MSB έχει αρνητικό συντελεστή: n-1 n-2 1 0 Δυαδικό: Δεκαδικό: *2 n-1 + *2 n-2 + *2 1 + *2 0 Οι αριθμητικές πράξεις δεν εξαρτώνται από το πρόσημο 9
Iδιότητες συμπλ. ως προς 2 Το σημαντικότερο bit δείχνει το πρόσημο αλλά είναι περισσότερο από απλά το πρόσημο Το εύρος αριθμών είναι ασύμμετρο: 2 n-1 ως 2 n-1-1 Δύο είδη υπερχείλισης Θετική υπερχείλιση παράγει αρνητικό αριθμό Αρνητική υποχείλιση (underflow) παράγει θετικό αριθμό Για αλλαγή προσήμου Αναστροφή όλων των bits (0 1) και πρόσθεση 1, στη λιγότερο σημαντική θέση Ονομάζεται και συμπλήρωμα ως προς 2 του αρχικού αριθμού Προσοχή: ( 2 n-1 ) προκαλεί υπερχείλιση! Α-Β = Α + (συμπλήρωμα ως προς 2 του Β) 10
Μετατροπές μεταξύ τύπων δεδομένων Μετατροπή από μεγαλύτερο σε μικρότερο τύπο, μπορεί να προκαλέσει λάθος Μετατροπή από μικρότερο σε μεγαλύτερο τύπο δεδομένων γίνεται με επέκταση προσήμου (sign extension) - για αριθμούς σε συμπληρωμα ως προς 2 Παράδειγμα: από byte σε short (16 bits): 2 = 0 0 0 0 0 0 1 0???????? 0 0 0 0 0 0 1 0-2 = 1 1 1 1 1 1 1 0???????? 1 1 1 1 1 1 1 0-2 = 11111110 1111111111111110 2 = 00000010 0000000000000010 (byte) (short) (byte) (short) 11
Δυαδικά δεδομένα και μνήμη Μία «λογική» μεταβλητή χρειάζεται 1 bit Ένας χαρακτήρας (γράμμα) σε ASCII χρειάζεται 8 bits Ένας αριθμός χρειάζεται συνήθως περισσότερα εξαρτάται από τον τύπο Πώς μπορεί η μνήμη να χειριστεί τα διαφορετικά μεγέθη; Η μνήμη, κατά τον προγραμματιστή, είναι οργανωμένη σαν ένας πίνακας από bytes Κάθε byte της μνήμης έχει τη δική του διεύθυνση αύξοντας αριθμός, από 0 μέχρι... Υπάρχουν διαφορετικές εντολές μηχανής για πρόσβαση σε δεδομένα διαφορετικού μεγέθους 12
Τοποθέτηση στη μνήμη Οι ΗΥ έχουν ένα σύνηθες μέγεθος που λέγεται λέξη (word) μιλάμε για 8bit, 32bit, 64bit επεξεργαστές Η μνήμη είναι οργανωμένη ώστε να μπορεί να προσπελάσει λέξεις άμεσα Πού μπορεί να τοποθετηθεί μια λέξη (32 bit); οπουδήποτε, π.χ. από τη διεύθυνση 5 και πάνω ευθυγραμμισμένα (aligned): από διευθύνσεις που είναι πολλαπλάσια του μεγέθους της (σε bytes ) π.χ. για 32-bit λέξεις από τη διεύθυνση 4 Με ποιά σειρά τοποθετούνται τα bytes μιας λέξης; από τη μικρή μεριά (little end) ή τη μεγάλη (big end) 13
Endianess figure source: wikipedia, endianess 14
Προβλήματα Endianess Προβλήματα παρουσιάζονται όταν μεταφέρονται δεδομένα από το ένα είδος ΗΥ στο άλλο όταν γίνεται προσπέλαση στα επιμέρους bytes μιας λέξης Καλά ορισμένα πρωτόκολλα επικοινωνίας ορίζουν το endianess με το οποίο αναπαριστούν τα δεδομένα serial (little endian) TCP/IP (big endian) 15
Ολίσθηση (shift) Αριστερή ολίσθηση n θέσεων ισοδυναμεί με πολλαπλασιασμό με 2 n Δεξιά ολίσθηση n θέσεων ισοδυναμεί με διαίρεση με 2 n Παραδείγματα: Μετακίνηση των bits αριστερά ή δεξιά ό,τι τιμή βγαίνει έξω από τις άκρες χάνεται! Για αριστερή ολίσθηση, συμπληρώνουμε με 0 Για δεξιά ολίσθηση 2 επιλογές: 6 = 0 0 0 0 0 1 1 0 >> 2 0 0 0 0 0 0 0 1 = 1-8 = 1 1 1 1 1 0 0 0 << 2 1 1 1 0 0 0 0 0 = -32 συμπλήρωση με 0 για φυσικούς αριθμούς ή μη-αριθμητικά δεδομένα συμπλήρωση με το πρόσημο για προσημασμένους αριθμούς 16
Εύκολοι πολ/σμοί, διαιρέσεις Γενικούς τρόπους θα δείτε σε άλλα μαθήματα Πολλαπλασιασμός με 3 x * 3 = x*(2+1) = x*2 + x Αριστερή ολίσθηση 1 Πρόσθεση του αρχικού αριθμού Πολλαπλασιασμός με 7 x * 7 = x*(8-1) = x*8 - x Αριστερή ολίσθηση 3 Αφαίρεση του αρχικού αριθμού Παρόμοια για διαιρέσεις 17