Αναπαράσταση Δεδομένων (2 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική
«Λογικές» πράξεις, μάσκες Πώς βρίσκουμε το υπόλοιπο μιας διαίρεσης με το 4; διαίρεση με 4 = δεξιά ολίσθηση 2 bits Το υπόλοιπο είναι τα 2 bits που χάνονται κατά την ολίσθηση 0 1 1 0 modulo 4 = 0 0 1 0 Για να τα απομονώσουμε πρέπει να κρύψουμε (mask) (μηδενίσουμε) τα υπόλοιπα bits χρησιμοποιώντας τον δυαδικό τελεστή ΚΑΙ με μια κατάλληλη μάσκα AND 0 1 1 0 0 0 1 1 0 0 1 0 μάσκα Άλλες λογικές πράξεις: Η (OR) θέτει bit σε 1 Αποκλειστικό Ή (XOR) αντιστρέφει bit 2
16-δικοί αριθμοί Οι δυαδικοί αριθμοί χρειάζονται πολλά ψηφία για να χρησιμοποιούνται από ανθρώπους Αντί για δυαδικούς, συχνά χρησιμοποιούμε 16-δικούς (hexadecimal) γιατί μετατρέπονται μεταξύ τους εύκολα Ψηφία 16-δικών αριθμών 0 9 όπως στους δεκαδικούς, και επιπλέον τα γράμματα A F που συμβολίζουν το 10 15 Κάθε 4 bits αντιστοιχούν σε ένα 16-δικο ψηφίο 1 1 1 1 1 0 0 0 = 0xF8 F(15) 8 Οι 16-δικοί είναι μόνο για δική μας διευκόλυνση δεν χρησιμοποιούνται απ ευθείας από το υλικό 3
Πραγματικοί αριθμοί Αριθμοί σταθερής υποδιαστολής (fixed point) Θέση bit n-1 1 0-1 -m Δυαδικός αριθμός Δεκαδικός: *2 n-1 + *2 1 + *2 0 + *2-1 + *2 - m Χρησιμοποιούνται κυρίως σε μονάδες ψηφιακής επεξεργασίας σήματος (digital signal processor) Οι πράξεις είναι ακριβώς όπως με τους ακέραιους 4
Αριθμοί κινητής υποδιαστολής Με σταθερή υποδιαστολή, αν έχουμε 5 ψηφία συνολικά με 2 ψηφία για το δεκαδικό τμήμα, μπορούμε να αναπαραστήσουμε αριθμούς όπως 123.45, 12.34, 1.23 περιοριζόμαστε σε αριθμούς γύρω από το μηδέν Με τον ίδιο αριθμό ψηφίων μπορούμε να αναπαραστήσουμε περισσότερους αριθμούς αν χρησιμοποιήσουμε κινητή υποδιαστολή: 0.12345, 1234500000, 0.000012345 ο αριθμός των ψηφίων (η ακρίβεια - precision) μένει ίδιος, αλλά η θέση της υποδιαστολής κινείται 5
Αριθμοί κινητής υποδιαστολής 2 Μπορούμε να γράψουμε ένα δεκαδικό πραγματικό αριθμό x με τη μορφή (επιστημονικός συμβολισμός scientific notation): x = ±q 10 m έτσι ώστε το q να είναι κανονικοποιημένο q 1. q 2 q n με q 1 > 0, θέτωντας μια κατάλληλη τιμή στο m Παράδειγμα: 0.001234 = 1.234 * 10-3 Το ίδιο μπορεί να γίνει με δυαδικούς αριθμούς Το q 1 είναι πάντα 1, οπότε δεν χρειάζεται να αναπαρασταθεί Κερδίζουμε ένα επιπλέον bit για ακρίβεια 6
Το πρότυπο IEEE 754 Καθορίζει αναπαράσταση αριθμών κινητής υποδιαστολής διαφόρων μεγεθών. 32 bit single-precision float: 31 30 23 22 0 sign (s) exponent (exp) mantissa or significand (sig) (-1) s x (1.sig) x 2 exp-127 (0.75) 10 (0.11) 2 (1.1x2-1 ) 2 0 01111110 10000000000000000000000 Οι επεξεργαστές έχουν εξειδικευμένο υλικό για πράξεις με αριθμούς κινητής υποδιαστολής 7
Αναπαραστάσιμοι αριθμοί Με πεπερασμένο αριθμό ψηφίων (mantissa) μόνο (κάποιοι) ρητοί αριθμοί μπορούν να παρασταθούν! Π.χ. σε δεκαδικό σύστημα ½=0.5, αλλά 1/3=0.333... άρητοι αριθμοί όπως ο π και ο 2, έχει δεκαδικά ψηφία που δεν τελειώνουν ποτέ! Στο δυαδικό σύστημα μόνο αριθμοί με παρονομαστή δύναμη του 2 έχουν πεπερασμένο αριθμό ψηφίων μετά την υποδιαστολή Για παράδειγμα το 0.1 (10) σε δυαδική αναπαράσταση γίνεται 0.00011001100... το 1100 επαναλαμβάνεται συνέχεια 8
Πραγματικοί αριθμοί σε ΗΥ Αριθμοί που δεν παριστάνονται, στρογγυλοποιούνται στον κοντινότερο αριθμό που μπορεί να παρασταθεί Οι αριθμοί κινητής υποδιαστολής θέλουν προσοχή! μικρά «λαθάκια» ακρίβειας συσωρεύονται η σειρά πράξεων (π.χ. αντιμετάθεση) μπορεί να δώσει (λίγο) διαφορετικές τιμές Θα δείτε πως αντιμετωπίζονται τέτοια προβλήματα στο μάθημα αριθμητικής ανάλυσης οι αριθμοί κινητής υποδιαστολής χρησιμοποιούνται ευρύτατα 9
Άλλοι αριθμοί: μιγαδικοί,... Γενικά συνθέτονται από ακέραιους ή πραγματικούς Π.χ. οι μιγαδικοί είναι απλά ένα ζευγάρι πραγματικών σε ΗΥ απλά δύο αριθμοί κινητής υποδιαστολής Οι πράξεις τους ορίζονται χρησιμοποιώντας πράξεις απλούστερων τύπων αριθμών Γλώσσες προγραμματισμού υψηλού επιπέδου ορίζουν τέτοιους τύπους (ή, συχνότερα το κάνει ο προγραμματιστής) και κατάλληλες αριθμητικές πράξεις αλλά υλοποιούνται με λογισμικό, όχι απευθείας από το υλικό 10
Αναπαράσταση χαρακτήρων Οι χαρακτήρες (γράμματα, σημεία στίξης, ψηφία αριθμών) πρέπει να κωδικοποιηθούν στο δυαδικό σύστημα Οι «πράξεις» με γράμματα έχουν λιγότερες απαιτήσεις από αυτές με αριθμούς αλφαβητική σειρά (το α πρέπει να είναι αμέσως πριν το β ) Παρόμοια για ψηφία: ο κωδικός του 1 αμέσως πριν αυτόν του 2,... εύκολη μετατροπή κεφαλαίων σε μικρά και αντίστροφα 11
Κωδικοποίηση ASCII Ενας χαρακτήρας αποθηκεύεται σε 7 bits Πιο συνηθισμένο είναι το extended ASCII που χρησιμοποιεί 8 bits (byte) Αν μπορείτε να θυμάστε 3 κωδικοποιήσεις, μπορείτε να βρείτε το κωδικό οποιουδήποτε χαρακτήρα 0 0x30 (48), A 0x41 (65), a 0x61 (97) Πως μετατρέπεται ο αριθμός 4 στο χαρακτήρα 4 ; Χρησιμοποιείται επίσης ως συνώνυμο του «σκέτου κειμένου», δηλαδή χωρίς μορφοποίηση (γραμματοσειρές κτλ) 12
Unicode Αν θέλουμε να χρησιμοποιήσουμε χαρακτήρες από πολλές γλώσσες, ο κώδικας ASCII δεν αρκεί Οι κωδικοποιήσεις Unicode λύνουν αυτό το πρόβλημα UTF-8, UCS-2, UTF-16, UTF-32 Πιο συχνά χρησιμοποιείται το UTF-8 Μεταβλητό μήκος κωδικού ανά χαρακτήρα: 1-4 bytes Οι πρώτοι 128 χαρακτήρες ASCII είναι ίδιοι και στο UTF-8 Χρησιμοποιείται στις περισσότερες ιστοσελίδες και είναι η πιο κοινή κωδικοποίηση σε προγράμματα email. Απευθείας υποστήριξη σε μοντέρνες γλώσσες προγραμματισμού 13
Γραμματοσειρές Αφορούν την εμφάνιση των χαρακτήρων όχι τα δεδομένα μικρές ζωγραφιές γραμμάτων/συμβόλων Για παράδειγμα το Ελληνικό Α και το λατινικό Α φαίνονται ίδια αλλά έχουν διαφορετικούς κωδικούς Μερικές φορές σε εφαρμογές η εμφάνιση αλλάζει ριζικά όταν αλλάζει κανείς τη γραμματοσειρά θέμα μετατροπής της αναπαράστασης ASCII ή UNICODE στην αντίστοιχη «ζωγραφιά» 14
Λέξεις, προτάσεις,... Έιναι απλά σειρές από χαρακτήρες - συμβολοσειρές Αγγλικός όρος: string Αποθηκεύονται συνεχόμενα στη μνήμη ο πρώτος χαρακτήρας στη διεύθυνση α ο επόμενος στη διεύθυνση α+1,... Πώς ξέρουμε που τελειώνει η σειρά; Υπάρχουν 2 τρόποι ειδικός χαρακτήρας (κωδικός 0) σημαίνει τέλος σειράς χαρακτήρων (Γλώσσα προγρ.c ) το μήκος της σειράς αποθηκεύεται μαζί με τους χαρακτήρες (Γλώσσα προγρ. Java) 15
Πολύπλοκα δεδομένα Πιο πολύπλοκα δεδομένα: συνδυασμός/ομάδες από αριθμούς (ακέραιους, πραγματικούς, χαρακτήρες) Σύνολα: απλή αντιστοίχιση στοιχείων σε αριθμούς π.χ. σχήματα: τετράγωνο 1, τρίγωνο 2,... Οι γλώσσες προγραμματισμού δίνουν τη δυνατότητα ορισμού τύπων δεδομένων που συνδιάζουν απλούς/βασικούς τύπους «πακετάρισμα» σε μία μεταβλητή πίνακας δεδομένων για πολλαπλά στοιχεία του ίδιου τύπου 16
Προστασία σφαλμάτων Σφάλματα μπορούν να συμβούν κατά τη μετάδοση ή όσο τα δεδομένα είναι αποθηκευμένα, εμφανίζονται ως αλλαγμένα bits Πώς μπορούμε να προστατεύσουμε τα δεδομένα από σφάλματα; Η λύση βρίσκεται στην ιδέα του πλεονασμού πληροφορίας (information redundancy): αν αρκούν x bit για κάποιο τύπο δεδομένου, χρησιμοποιούμε κάποια επιπλέον p bits ελέγχου οι τιμές των p bits προέρχονται από τα x bit δεδομένων με κάποιο αλγόριθμο για έλεγχο ορθότητας, (ξανα)υπολογίζουμε τις τιμές των p bit ελέγχου, αν δεν είναι ίδιες με αυτές που έχουμε, υπάρχει σφάλμα 17
Έλεγχος ισοτιμίας (parity) Ενα επιπλέον bit προστίθεται στο τέλος της σειράς των bit που θέλουμε να προστατεύσουμε Περιττή ισοτιμία (odd parity): η τιμή του bit ισοτιμίας είναι τέτοια ώστε ο συνολικός αριθμός των 1 σε όλη τη σειρά (συμπ. το bit ισοτιμίας) είναι περιττός Αντίστοιχα για άρτια ισοτιμία (even parity) συνολικός αριθμός των 1 είναι άρτιος Παράδειγμα. Δεδομένα: 001011. Υπάρχουν 3 1, ήδη περιττός αριθμός, Άρα το bit ισοτιμίας θα είναι 0 Τελική αναπαράσταση 0010110 18
Ανίχνευση λάθους με ισοτιμία Αν ένα bit αλλάξει τιμή, ο αριθμός των 1 από περιττός θα γίνει άρτιος ή το αντίθετο Μετρώντας τον αριθμό των 1, θα δούμε ότι υπάρχει λάθος Παράδειγμα Αρχικά δεδομένα 0010110 Διαβάζουμε 1010110, υπάρχουν 4 bit με τιμή 1, ενώ περιμένουμε περιττό αριθμό Το λάθος ανιχνεύτηκε 19
Ανίχνευση λαθών Με ισοτιμία ανιχνεύουμε λάθη σε 1,3,... bit Υπάρχουν πιο περίπλοκες κωδικοποιήσεις για ανίχνευση περισσότερων λαθών χρειάζονται περισσότερα bit ελέγχου ίσως να έχετε ακούσει για CRC, md5, Μπορούμε να μειώσουμε την πιθανότητα αδυναμίας ανίχνευσης λάθους όσο θέλουμε, «πληρώνοντας» περισσότερα bit ελέγχου Αξιόπιστο σύστημα: δεν κάνει λάθη εκτός και αν είναι λάθη των προγραμματιστών... Ανίχνευση λάθους προκαλεί επανεκτέλεση (ή επανάληψη μετάδοσης για δίκτυα) 20
Διόρθωση λαθών Υπάρχουν κώδικες που μπορούν να διορθώσουν έναν αριθμό λαθών και να ανιχνεύσουν ακόμα περισσότερα λάθη Βασική ιδέα: οι δυαδικοί κωδικοί κάθε ζεύγους συμβόλων διαφέρουν τουλάχιστον κατά x bit αν τα (x-1)/2 bit αλλάξουν από λάθος η κοντινότερη κωδικοποίηση θα αντιστοιχεί μόνο στο σωστό σύμβολο 21
Ψηφιακά και αναλογικά δεδομένα Ψηφιακό (digital) διακριτά δεδομένα μπορούν να πάρουν οποιαδήποτε τιμή από ένα πεπερασμένο σύνολο τιμών π.χ. αριθμοί κινητής υποδιαστολής Αναλογικό (analog) παράσταση δεδομένων με συνεχή τρόπο άπειρο σύνολο τιμών π.χ. πραγματικοί αριθμοί Στο περιβάλλον οι αισθήσεις μας δίνουν αναλογικά δεδομένα π.χ. όραση (συνεχείς διαβαθμίσεις χρωμάτων), ακοή 22
Ψηφιοποίηση Οι υπολογιστές χειρίζονται ψηφιακά δεδομένα Πώς μπορεί ένας υπολογιστής να χειριστεί ήχους, εικόνες, και άλλα αναλογικά δεδομένα; Χρειάζεται ψηφιοποίηση (digitization) των αναλογικών «σημάτων» σε ψηφιακά για επεξεργασία από ΗΥ Η ψηφιοποίηση περιλαμβάνει 3 βήματα Δειγματοληψία (sampling) Κβαντισμό (quantization) Κωδικοποίηση 23
Πλεονεκτήματα ψ. αναπαράστασης Δυνατότητες επεξεργασίας εύκολη επεξεργασία από λογισμικό π.χ. κρυπτογράφηση, αλλαγή γλώσας ομιλίας σε video,... Αξιόπιστη μετάδοση Οι δύο καταστάσεις λιγότερο επιρρεπής σε αλλοιώσεις Κωδικοποιήσεις ανίχνευσης/διόρθωσης λαθών Εύκολη αποθήκευση σε οποιοδήποτε μέσο: δίσκος, μνήμη flash, μικρό μέγεθος, μικρή κατανάλωση ρεύματος Εύκολη παραγωγή πιστών αντιγράφων απλά αντιγράφονται αριθμοί 24
Δειγματοληψία, κβαντισμός Δειγματοληψία λαμβάνονται τιμές του αναλογικού σήματος (δείγματα) σε ισοκατανεμημένα στο χρόνο διαστήματα Ο αριθμός των δειγμάτων στη μονάδα χρόνου πρέπει να είναι κατάλληλος Αν το σήμα αλλάζει γρήγορα χρειάζονται πολλά δείγματα ανά δευτερόλεπτο Κβαντισμός αντιστοίχιση της τιμής του αναλογικού σήματος στον κοντινότερο αριθμό που μπορεί να παρασταθεί ψηφιακά σφάλματα κβαντισμού 25
26