Περισσότεροι τύποι δεδομένων |
Στο πρόγραμμα που βρίσκεται στο αρχείο ΜORTYPES.C θα διαπιστώσετε οτι εκτός από ακέραιες μεταβλητές έχουν τώρα οριστεί δύο νέοι τύποι μεταβλήτών, οι χαρακτήρες (με τη λέξη κλειδί char) και οι πραγματικοί (με τη λέξη κλειδί float). Ο χαρακτήρας είναι περίπου ίδιος με τον ακέραιο με μόνη διαφορά το μέγεθος της μεταβλητής. Μιά δήλωση ακέραιας μεταβλητής οδηγεί τον μεταφραστή στη δέσμευση 2 bytes στη μνήμη του υπολογιστή, σε παράσταση της μορφής συμπληρώματος του 2, έτσι ώστε η ακέραια μεταβλητή μπορεί να πάρει τιμές στο διάστημα από -32768 έως +32767. Μιά δήλωση χαρακτήρα δεσμεύει 1 byte στη μνήμη, όσο δηλαδή απαιτείται γιά την έκφραση ενός χαρακτήρα με βάση τον κώδικα ASCII. Επομένως μιά μεταβλητή τύπου χαρακτήρα μπορεί να πάρει τιμές στο διάστημα -128 έως +127, εάν θεωρήσουμε αποθήκευση μορφής συμπληρώματος του 2. Να σημειωθεί οτι ως ακέραιες μεταβλητές οι χαρακτήρες μπορούν να συμμετέχουν σε όλες τις αριθμητικές εκφράσεις που συμμετέχουν οι κανονικοί ακέραιοι. Ο δεύτερος νέος τύπος που ορίζεται είναι ο πραγματικός αριθμός, γνωστός και ως αριθμός κινητής υποδιαστολής. Καταλαμβάνει 4 bytes μνήμης και επιτρέπει την παράσταση αριθμών στο εύρος από 3.4E-38 έως 3.4E+38. Η αναπαράσταση λέγεται κινητής υποδιαστολής γιατί σε επίπεδο μηχανής ένας πραγματικός αριθμός εκφράζονται ως δύναμη του 2 με τη βοήθεια δύο συνθετικών: της βάσης και του εκθέτη. Η βάση είναι προσημασμένη και πάντα έτσι κανονικοποιημένη ώστε να έχει μηδενικό ακέραιο μέρος και το πρώτο σημαντικό bit να βρίσκεται αμέσως μετά την υποδιαστολή. Αντίστοιχα μεταβάλλεται και ο επίσης προσημασμένος εκθέτης. Οι αριθμητικές πράξεις των πραγματικών αριθμών είναι ίδιες με αυτές των ακεραίων με εξαίρεση τη διαίρεση που είναι προφανώς πραγματική και όχι ακέραια με πηλίκο και υπόλοιπο. Οι τρείς πρώτες εκτελέσιμες γραμμές του προγράμματος περιέχουν εκχωρήσεις γιά τους τρείς τύπους δεδομένων. Οι σταθερές χαρακτήρων ορίζονται με τη χρήση απλών εισαγωγικών, ενώ οι πραγματικοί αριθμοί συνήθως παριστώνται στη δεκαδική τους μορφή. Αφού ο χαρακτήρας είναι στην πραγματικότητα μικρός ακέραιος είναι αναμενόμενο οτι αυτό που πραγματικά αποθηκεύεται τση μεταβλητή χαρακτήρα είναι ο κωδικός ASCII που αντιστοιχεί στο συγκεκριμένο χαρακτήρα, δηλαδή το 65. Η C επιτρέπει την ανάμιξη των τύπων ακεραίου και χαρακτήρα, όπως φαίνεται χτις παρακάτω γραμμές του προγράμματος. Η τιμή μιάς μεταβλητής χαρακτήρα μπορεί να εκχωρηθεί χωρίς κανένα πρόβλημα σε ακέραια μεταβλητή. Το αντίθετο επίσης μπορεί να γίνει αλλά πρέπει να είμαστε προσεκτικοί έτσι ώστε η ακέραια τιμή που θα εκχωρηθεί στο χαρακτήρα να είναι στα σωστά όρια. Προσοχή: αν αυτό δεν ισχύει δεν πρόκειται να πάρουμε κάποιο μήνυμα λάθους κατά τη μετάφραση ή εκτέλεση του προγράμματος, δηλαδή η C δεν υποστηρίζει αυστηρό έλεγχο τύπων δεδομένων. Ο προγραμματιστής είναι υπεύθυνος. Αυτή η ανάμιξη ακεραίων και χαρακτήρων επεκτείνεται και στα ορίσματα ή εξαγόμενα των συναρτήσεων της C. Έτσι, όπου υπάρχει όρισμα που δηλώνεται ακέραιου τύπου, εκεί μπορεί να χρησιμοποιηθεί μεταβλητή είτε ακέραια ή χαρακτήρας. Οι δύο τελευταίες γραμμές του προγράμματος δείχνουν τη δυνατόταητα ανάμιξης ακέραιων και πραγματικών μεταβλητών. Όταν μιά ακέραια τιμή εκχωρηθεί σε πραγματική μεταβλητή τότε απλά προστίθεται ένα μηδενικό κλασματικό μέρος. Όταν μιά πραγματική τιμή εκχωρείατι σε ακέραια μεταβλητή τότε ο εκθέτης πρέπει να μηδενιστεί, δηλαδή να έχουμε απλή δεκαδική έκφραση και όχι εκθετική). Το κλασματικό μέρος που πιθανά παραμένει αποκόπτεται. Το ακέραιο μέρος πρέπει να είναι στα όρια των ακέραίων αριθμών αλλοιώς η εκχώρηση καταλήγει σε λάθος. Και πάλι ο προγραμματιστής είναι υπεύθυνος. Το πρόγραμμα αυτό δεν παράγει αποτελέσματα, μιά που ακόμη δεν μάθαμε να παρουσιάζουμε χαρακτήρες ή πραγαματικούς. Τους ακεραίους μπορείτε να τους παρουσιάσετε με τη χρήση της printf όπως σε προηγούμενα προγράμματα. |
![]() |
![]() |
![]() |