Εισαγωγή στον Προγραμματισμό Ακαδημαϊκό Έτος 2010-2011 Επιμέλεια Ξενοφών Βασιλάκος
Περιεχόμενα Φροντιστηρίου 1. Κωδικοποίηση και Δυαδική Αναπαράσταση 2. Κωδικοποίηση ASCII Κωδικοποίηση Unicode Εισαγωγή στον Προγραμματισμό Υπολογιστών 2
Κωδικοποίηση - Θεμελιώδεις έννοιες Δυαδική Αναπαράσταση Θεσιακό Σύστημα Δυαδικό Σύστημα Από το δυαδικό στο δεκαδικό Αρνητικοί αριθμοί Κωδικοποίηση Αριθμών στην Java - πρωτόγονοι (θεμελιώδεις) τύποι (Primitive Data Types) Κωδικοποίηση Και Δυαδική Αναπαράσταση Εισαγωγή στον Προγραμματισμό Υπολογιστών 3
Κωδικοποίηση Θεμελιώδεις έννοιες Δεδομένο Ένα σύμβολο, πχ ένα ψηφίο ή ένα γράμμα Πληροφορία Ένα σύνολο από δεδομένα (πχ η λέξη «Γιάννης») μαζί με την ερμηνεία επί αυτών (το όνομα ενός ατόμου) Κώδικας (code) Ένας κανόνας βάσει του οποίου μετατρέπεται μια πληροφορία σε μία άλλη μορφή αναπαράστασης Παράδειγμα: ήχος τραγουδιού σε μαγνητισμένες/απομαγνητισμένες περιοχές μιας μαγνητοταινίας Εισαγωγή στον Προγραμματισμό Υπολογιστών 4
Δυαδική Αναπαράσταση Το Θεσιακό σύστημα Θεσιακό Σύστημα Αρίθμησης Οι αριθμοί αναπαρίστανται με ορισμένα σύμβολα ή συνδυασμούς τους Η αξία των αριθμών αυτών υπολογίζεται από: τις αξίες των συμβόλων και τη θέση των συμβόλων Παράδειγμα Ο αριθμός 8690 = ( 8 10 3 ) + ( 6 10 2 ) + ( 9 10 1 ) + ( 0 10 0 ) Άλλα συστήματα Αρίθμησης: http://en.wikipedia.org/wiki/numeral_system#types_of_numeral_systems Εισαγωγή στον Προγραμματισμό Υπολογιστών 5
Δυαδική Αναπαράσταση 1/2 Το δυαδικό σύστημα Αναπαριστά τιμές με ακριβώς δύο σύμβολα: 0 και το 1 (Δυαδικά ψηφία Binary Digits(δυφία - bits) Σε αντίθεση με το σύνηθες δεκαδικό που κάνει χρήση 10 συμβόλων ψηφίων (0, 1, 2, 3, 9) Είναι θεσιακό σύστημα με βάση το 2 Σε αντιδιαστολή με το δεκαδικό (βάση το 10) Κάθε bit ανήκει σε μία τάξη μεγέθους μεγαλύτερη κατά ένα από αυτήν του ψηφίου στα δεξιά του Από δεξιά προς τ' αριστερά: μονάδες (x2 0 ), δυάδες (x2 1 ), τετράδες (x2 2 ), οκτάδες (x2 3 ) κ.ο.κ. Εισαγωγή στον Προγραμματισμό Υπολογιστών 6
Δυαδική Αναπαράσταση Το δυαδικό σύστημα Δεκαδικό σύστημα: Όταν ένα ψηφίο ενός αριθμού φτάσει το 9, μια αύξηση του κατά ένα το επαναφέρει στο 0 και αυξάνει αριστερό ψηφίο κατά ένα 2/2 Δυαδικό σύστημα: Κατά αντιστοιχία Εισαγωγή στον Προγραμματισμό Υπολογιστών 7
Δυαδική Αναπαράσταση Από δυαδικό σε δεκαδικό, πχ: 100101 Θέση: Από δεξιά προς αριστερά 5 η 4 η 3 η 2 η 1 η 0 η Δυαδική Τιμή: 1 0 0 1 0 1 Μετατροπή σε Δεκαδική Τιμή: (1) 2 5 (0) 2 4 (0) 2 3 (1) 2 2 (0) 2 1 (1) 2 0 100101 = = [1 32] + [0 16] + [0 8] + [1 4] + [0 2] + [1 1] = = 37 Εισαγωγή στον Προγραμματισμό Υπολογιστών 8
Δυαδική Αναπαράσταση 1/2 Αρνητικοί αριθμοί Ο πιο απλός τρόπος αναπαράστασης: Το πρώτο bit (πιο σημαντικό δυφίο) υποδηλώνει το πρόσημο 0011 3 Vs. 1011-3 Προσοχή! το 1011 ερμηνεύεται ως -3 και όχι ως 11 (1011 = 1 + 2 + 8 = 11) 9
Δυαδική Αναπαράσταση Αρνητικοί αριθμοί 2/2 Τι συμβαίνει πραγματικά στην αναπαράσταση αρνητικών αριθμών στη μνήμη του Η/Υ; Συμπλήρωμα (Εκτός ύλης μαθήματος) Στη πραγματικότητα γίνεται χρήση του συμπληρώματος ως προς δύο Για όποιον ενδιαφέρεται http://en.wikipedia.org/wiki/ Two's_complement Θα τα δείτε αναλυτικά σε άλλα μαθήματα του οδηγού σπουδών 10
Κωδικοποίηση Αριθμών στην Java πρωτόγονοι (θεμελιώδεις) τύποι (Primitive Data Types) 1/3 Χρήσιμοι σε στοχευόμενες περιπτώσεις για να μη σπαταλάμε μνήμη byte: 8-bit (συμπλ-2) ακέραιος minimum = -128, maximum = 127 short: 16-bit (συμπλ-2) ακέραιος minimum -32,768, maximum 32,767 int: 32-bit (συμπλ-2) ακέραιος minimum = - 2,147,483,648, maximum = -2,147,483,647 Προεπιλογή default choice long: 64-bit (συμπλ-2) ακέραιος Minimum 9,223,372,036,854,775,80 8, Maximum 9,223,372,036,854,775,80 7 Εισαγωγή στον Προγραμματισμό Υπολογιστών 11
Κωδικοποίηση Αριθμών στην Java πρωτόγονοι (θεμελιώδεις) τύποι (Primitive Data Types) 2/3 float (Χρήσιμο για να γλιτώνεις μνήμη): Μονής ακρίβειας (single-precision) 32-bit IEEE 754 κυλιόμενης υποδιαστολής (floating point) Δείτε εξήγηση στον double για το τι σημαίνουν τα παραπάνω double: (default επιλογή) Διπλής ακρίβειας (double-precision) 64-bit IEEE 754 κυλιόμενης υποδιαστολής (floating point) Εισαγωγή στον Προγραμματισμό Υπολογιστών 12
Κωδικοποίηση Αριθμών στην Java πρωτόγονοι (θεμελιώδεις) τύποι (Primitive Data Types) 3/3 boolean: Αληθές (true) ή Ψευδές (false) Αν και θα μπορούσε να είναι κωδικοποιημένο με ένα bit, στη πραγματικότητα είναι 111.111 ή 000.000 για το αληθές και ψευδές αντίστοιχα char: 16-bit Unicode χαρακτήρας (βλ. επόμενες διαφάνειες) Στη μνήμη καταλαμβάνει όσο και ένας int (32 δυφία) εκ των οποίων κάνουμε χρήση των 16 πιο σημαντικών (πιο αριστερών) 65,535 διαφορετικοί χαρακτήρες Εισαγωγή στον Προγραμματισμό Υπολογιστών 13
American Standard Code for Information Interchange UNICODE ASCII ΚΑΙ UNICODE Εισαγωγή στον Προγραμματισμό Υπολογιστών 14
ASCII 1/2 American Standard Code for Information Interchange Αμερικανικός Πρότυπος Κώδικας για Ανταλλαγή Πληροφοριών 1963 από τον Αμερικανικό Οργανισμό Τυποποίησης (ASA, σημερινός ANSI) Τυποποιήθηκε με σκοπό τη κοινά αποδεκτή χρήση ενός κωδικοποιημένο σύνολο χαρακτήρων Του λατινικού αλφάβητου (Αγγλική γλώσσα) Και για άλλες δυτικές γλώσσες Εισαγωγή στον Προγραμματισμό Υπολογιστών 15
ASCII 2/3 American Standard Code for Information Interchange Οι εκτυπώσιμοι χαρακτήρες του ASCII από 32 μέχρι 126 Υπάρχει επίσης στο πρότυπο Unicode (που αντικατέστησε το ASCII), ως οι πρώτοι 128 χαρακτήρες Οι πρώτοι 32 κώδικες (0 31) είναι δεσμευμένοι για χαρακτήρες ελέγχου χρησιμεύουν για έλεγχο συσκευών ο χαρακτήρας 10 αναπαριστά την λειτουργία τροφοδοσία χαρτιού Ο χαρακτήρας 27 αναπαριστά το κουμπί escape Ο κώδικας 127 (και τα επτά bits με την τιμή 1) είναι το delete-σβήσιμο Εισαγωγή στον Προγραμματισμό Υπολογιστών 16
ASCII American Standard Code for Information Interchange 3/3 Κώδικας των επτά δυφίων (bits) Μήκος Λέξης: Οι παλιοί υπολογιστές χρησιμοποιούσαν σαν ελάχιστο μέγεθος οργάνωσης της μνήμης (λέξη) την οκτάδα (byte) Όλες οι δυνατές ακολουθίες επτά δυαδικών ψηφίων διάστημα από το 0 μέχρι το 127 στο δεκαδικό To πρώτο μπιτ Χρησίμευε ως δυφίο διόρθωσης κώδικα (parity bit) Έμενε αχρησιμοποίητο ή... Για αλλαγή γλώσσας Εισαγωγή στον Προγραμματισμό Υπολογιστών 17
UNICODE 1/2 διεθνές πρότυπο Unicode Κωδικοποίηση όλων των συστημάτων γραφής δυνατή η αποθήκευση στη μνήμη ενός υπολογιστή το κείμενο μιας οποιασδήποτε γλώσσας Φυσικές γλώσσες (π.χ. Ιαπωνική Παραδοσιακή γραφή ) Συμπεριλαμβάνει και συμβόλων επιστημών, όπως μαθηματικά, φυσική Ευρέως υιοθετημένη XML, Λειτουργικά συστήματα, Java Εισαγωγή στον Προγραμματισμό Υπολογιστών 18
UNICODE 1/2 Δυτικές Γλώσσες Πρόβλημα το λογισμικό που γράφεται στον δυτικό κόσμο χειρίζεται μόνο κωδικοποιήσεις 8-bit με την Unicode υποστήριξη να προστίθεται πολύ αργότερα αδύνατη η χρήση περισσότερων των 256 κωδικών σημείων χωρίς ειδική επεξεργασία Λύση: Το Unicode ορίζει δυο τρόπους απεικόνισης: UTF (Unicode Transformation Format) κωδικοποιήσεις UCS (Universal Character Set) κωδικοποιήσεις Εξής κύριες: UTF-32, UCS-4, UTF-16, UCS-2, UTF-8, UTF-EBCDIC Εισαγωγή στον Προγραμματισμό Υπολογιστών 19
UNICODE: UTF-8 1/2 Γενικά Μέχρι τέσσερα bytes ανά χαρακτήρα ανάλογα με το σύμβολο και το κωδικό του σημείο Παράδειγμα μόνο ένα UTF-8 byte χρειάζεται για την κωδικοποίηση των 128 ASCII χαρακτήρων στο διάστημα του Unicode U+0000 μέχρι U+007F Java χρησιμοποιεί UTF-16 (παραπλήσιο με UTF-8)για την εσωτερική αναπαράσταση κειμένου Υποστηρίζει και μια μη-τυποποιημένη τροποποίηση του UTF-8 για σειριοποίηση συμβολοσειρών modified UTF-8. Εισαγωγή στον Προγραμματισμό Υπολογιστών 20
UNICODE: UTF-8 2/2 Οργάνωση δυφίων σε κωδικολέξη Unicode Tο Πιο σημαντικό bit ενός χαρακτήρα ενός byte είναι πάντα 0 Τα πιο σημαντικά bits του πρώτου byte μιας ακολουθίας πολλών byte καθορίζει το μήκος της ακολουθίας. Πχ: Τα πιο σημαντικά bits για ακολουθίες δύο byte είναι τα 110 Για ακολουθίες τριών bytes, είναι τα 1110 κ.ο.κ.... Τα ακόλουθα bytes μιας ακολουθίας πολλών byte έχουν 10 σαν τα δύο ποιό σημαντικά bits. Εισαγωγή στον Προγραμματισμό Υπολογιστών 21
Τι Ακούσατε Σήμερα Κωδικοποίηση Δυαδική Αναπαράσταση Θεσιακό Σύστημα Δυαδικό Σύστημα Από το δυαδικό στο δεκαδικό Αρνητικοί αριθμοί Κωδικοποίηση Αριθμών στην Java Κωδικοποίηση ASCII Κωδικοποίηση Unicode Εισαγωγή στον Προγραμματισμό Υπολογιστών
ΤΕΛΟΣ! Εισαγωγή στον Προγραμματισμό Υπολογιστών