Μεγέθη τύπων δεδομένων γ. Μεταβλητές στη γλώσσα C

Εργαλείο 15.07.2019
Επισκόπηση προγράμματος Η έκδοση υπολογιστή του Microsoft Excel Viewer θα επιτρέψει...

Εκτός από τη διαίρεση των δεδομένων σε μεταβλητές και σταθερές, υπάρχει και ταξινόμηση των δεδομένων ανά τύπο. Η περιγραφή των μεταβλητών συνίσταται κυρίως στη δήλωση του τύπου τους. Ο τύπος δεδομένων χαρακτηρίζει το εύρος των τιμών του και τη μορφή αναπαράστασης στη μνήμη του υπολογιστή. Κάθε τύπος χαρακτηρίζεται από ένα σύνολο λειτουργιών που εκτελούνται σε δεδομένα. Παραδοσιακά, οι γλώσσες προγραμματισμού γενικής χρήσης έχουν τυπικούς τύπους όπως ακέραιος, πραγματικός, χαρακτήρας και λογικός 3 . Ας σημειώσουμε αμέσως ότι δεν υπάρχει λογικός τύπος στο C. Μια έκφραση (στη συγκεκριμένη περίπτωση, μια μεταβλητή) θεωρείται αληθής εάν είναι μη μηδενική, διαφορετικά θεωρείται ψευδής.

Η ύπαρξη δύο αριθμητικών τύπων (ακέραιος και πραγματικός) συνδέεται με δύο πιθανές μορφές αναπαράστασης αριθμών στη μνήμη του υπολογιστή.

Δεδομένα ολόκληρου τύπουαποθηκεύονται σε μορφή παρουσίασης σταθερό σημείο. Χαρακτηρίζεται από απόλυτη ακρίβεια στην αναπαράσταση αριθμών και στην εκτέλεση πράξεων σε αυτούς, καθώς και από περιορισμένο εύρος τιμών αριθμών. Ο ακέραιος τύπος χρησιμοποιείται για δεδομένα που, καταρχήν, δεν μπορούν να έχουν κλασματικό μέρος (αριθμός ατόμων, αυτοκίνητα κ.λπ., αριθμοί και μετρητές).

Πληκτρολογήστε πραγματικόαντιστοιχεί στη μορφή αναπαράστασης αριθμού κινητής υποδιαστολής, η οποία χαρακτηρίζεται από μια κατά προσέγγιση αναπαράσταση ενός αριθμού με δεδομένο αριθμό σημαντικών ψηφίων (σύμβολα mantissa) και ένα μεγάλο εύρος της τάξης του αριθμού, που καθιστά δυνατή την αναπαράσταση τόσο μεγάλων όσο και πολύ μικρών αριθμών σε απόλυτη τιμή. Λόγω της κατά προσέγγιση αναπαράστασης δεδομένων πραγματικού τύπου, τους είναι λάθος να γίνεται σύγκριση για ισότητα.

Στις σύγχρονες υλοποιήσεις καθολικών γλωσσών προγραμματισμού, υπάρχουν συνήθως αρκετοί ακέραιοι και αρκετοί πραγματικοί τύποι, καθένας από τους οποίους χαρακτηρίζεται από το δικό του μέγεθος μνήμης που εκχωρείται για μία τιμή και, κατά συνέπεια, το εύρος των τιμών του αριθμού και για τους πραγματικούς τύπους - και του ακρίβεια (ο αριθμός των ψηφίων της μάντισσας).

Δεδομένα τύπος χαρακτήραλαμβάνουν τιμές σε ολόκληρο το σύνολο χαρακτήρων που επιτρέπονται για έναν δεδομένο υπολογιστή. Ένα byte εκχωρείται για την αποθήκευση μιας τιμής χαρακτήρων που κωδικοποιούνται σύμφωνα με έναν τυπικό πίνακα κωδικοποίησης (συνήθως ASCII).

Υπάρχουν 4 βασικοί τύποι στο C:

απανθρακώνω- τύπος χαρακτήρα.

ενθ- ολόκληρος τύπος,

φλοτέρ- ενιαίο πραγματικό τύπο ακριβείας,

διπλό- διπλής ακρίβειας πραγματικός τύπος.

Για να ορίσετε παραγόμενους τύπους, χρησιμοποιήστε προκριματικά:μικρός(κοντό) - χρησιμοποιείται με τύπο ενθ,μακρύς(μακρύ) - χρησιμοποιείται με τύπους ενθΚαι διπλό;υπογεγραμμένος(με σημάδι), ανυπόγραφο(ανυπόγραφο) - ισχύει για οποιονδήποτε ακέραιο τύπο. Σε περίπτωση απουσίας της λέξης ανυπόγραφη, η τιμή θεωρείται υπογεγραμμένη, δηλ. δηλ. υπογράφεται η προεπιλογή. Λόγω του παραδεκτού αυθαίρετου συνδυασμού χαρακτηριστικών και ονομάτων βασικών τύπων, ένας τύπος μπορεί να έχει πολλές ονομασίες. Πληροφορίες σχετικά με τους τυπικούς τύπους C παρουσιάζονται στους Πίνακες 1 και 2. Οι περιγραφείς συνωνύμων παρατίθενται στα κελιά της πρώτης στήλης, διαχωρισμένοι με κόμματα.

Πίνακας 1. Τυπικοί ακέραιοι τύποι δεδομένων C

Τύπος δεδομένων

Εύρος τιμών

char, υπογεγραμμένο char

ανυπόγραφος int, ανυπόγραφος

int, υπογεγραμμένο int, short int, short

2147483648...2147483647

Είναι ενδιαφέρον ότι στο C, ο τύπος char μπορεί να χρησιμοποιηθεί ως χαρακτήρας ή ως ακέραιος τύπος, ανάλογα με το περιβάλλον.

Πίνακας 2. Πρότυποι τύποι πραγματικών δεδομένων Γ

Σχόλιο.Για να γράψουμε προγράμματα για το πρώτο μέρος του εγχειριδίου, θα χρειαστούμε κυρίως δύο είδη:φλοτέρΚαιενθ.

Οι τύποι δεδομένων στο C είναι μια κατηγορία δεδομένων των οποίων οι τιμές έχουν παρόμοια χαρακτηριστικά. Ο τύπος ορίζει την εσωτερική αναπαράσταση δεδομένων στη μνήμη. Οι πιο βασικοί τύποι δεδομένων: λογικοί, ακέραιοι, αριθμοί κινητής υποδιαστολής, συμβολοσειρές, δείκτες.

Με τη δυναμική πληκτρολόγηση, μια μεταβλητή συσχετίζεται με έναν τύπο τη στιγμή της αρχικοποίησης. Αποδεικνύεται ότι μια μεταβλητή σε διαφορετικά μέρη του κώδικα μπορεί να έχει διαφορετικούς τύπους. Η δυναμική πληκτρολόγηση υποστηρίζεται από Java Script, Python, Ruby, PHP.

Η στατική πληκτρολόγηση είναι το αντίθετο της δυναμικής πληκτρολόγησης. Όταν δηλώνεται, μια μεταβλητή λαμβάνει έναν τύπο που δεν αλλάζει αργότερα. Οι γλώσσες C και C++ είναι ακριβώς αυτό. Αυτή η μέθοδος είναι η πιο βολική για τη σύνταξη σύνθετου κώδικα και πολλά σφάλματα εξαλείφονται στο στάδιο της μεταγλώττισης.

Οι γλώσσες χωρίζονται ανεπίσημα σε έντονα δακτυλογραφημένες και αδύναμες. Η ισχυρή πληκτρολόγηση σημαίνει ότι ο μεταγλωττιστής θα παρουσιάσει ένα σφάλμα εάν ο αναμενόμενος και ο πραγματικός τύπος δεν ταιριάζουν.

x = 1 + "2"; //σφάλμα - δεν μπορείτε να προσθέσετε σύμβολο σε έναν αριθμό

Ένα παράδειγμα αδύναμης πληκτρολόγησης.

Ο έλεγχος συνοχής τύπου πραγματοποιείται από το σύστημα ασφαλείας τύπου. Παρουσιάζεται σφάλμα πληκτρολόγησης, για παράδειγμα, όταν προσπαθείτε να χρησιμοποιήσετε έναν αριθμό ως συνάρτηση. Υπάρχουν άτυπες γλώσσες. Σε αντίθεση με τα δακτυλογραφημένα, σας επιτρέπουν να εκτελέσετε οποιαδήποτε λειτουργία σε κάθε αντικείμενο.

Μαθήματα μνήμης

Οι μεταβλητές, ανεξάρτητα από τον τύπο τους, έχουν το δικό τους εύρος και διάρκεια ζωής.

Μαθήματα μνήμης:

  • αυτο;
  • στατικός;
  • εξωτερικό?
  • μητρώο.

Όλες οι μεταβλητές στη γλώσσα C είναι τοπικές από προεπιλογή. Μπορούν να χρησιμοποιηθούν μόνο εντός συνάρτησης ή μπλοκ. Όταν ολοκληρωθεί η συνάρτηση, η τιμή τους καταστρέφεται.

Μια στατική μεταβλητή είναι επίσης τοπική, αλλά μπορεί να έχει διαφορετική τιμή εκτός του μπλοκ της και η τιμή αποθηκεύεται μεταξύ των κλήσεων συναρτήσεων.

Η εξωτερική μεταβλητή είναι καθολική. Είναι διαθέσιμο σε οποιοδήποτε μέρος του κώδικα και ακόμη και σε άλλο αρχείο.

Οι προσδιοριστές τύπων δεδομένων στο C ενδέχεται να μην καθορίζονται στις ακόλουθες περιπτώσεις:

  1. Όλες οι μεταβλητές μέσα στο μπλοκ δεν είναι μεταβλητές, επομένως, εάν πρόκειται να χρησιμοποιηθεί αυτή η συγκεκριμένη κατηγορία μνήμης, τότε ο αυτόματος προσδιοριστής δεν καθορίζεται.
  2. Όλες οι συναρτήσεις που δηλώνονται εκτός ενός μπλοκ ή μιας συνάρτησης είναι καθολικές από προεπιλογή, επομένως ο εξωτερικός προσδιοριστής δεν απαιτείται.

Για να υποδείξετε απλούς τύπους, χρησιμοποιήστε τους προσδιοριστές int, char, float ή double. Οι τροποποιητές unsigned, signed, short, long, long long μπορούν να αντικατασταθούν για μεταβλητές.

Από προεπιλογή, όλοι οι αριθμοί είναι υπογεγραμμένοι, επομένως, μπορούν να βρίσκονται μόνο στο εύρος των θετικών αριθμών. Για να ορίσετε μια μεταβλητή τύπου char ως signed, γράψτε signed char. Το Long, το long long και το short υποδεικνύουν πόσος χώρος μνήμης έχει διατεθεί για αποθήκευση. Το μεγαλύτερο είναι μακρύ μακρύ, το μικρότερο είναι κοντό.

Το Char είναι ο μικρότερος τύπος δεδομένων στο C. Μόνο 1 byte μνήμης εκχωρείται για την αποθήκευση τιμών. Σε μια μεταβλητή τύπου χαρακτήρα εκχωρούνται συνήθως χαρακτήρες, λιγότερο συχνά - αριθμοί. Οι τιμές των χαρακτήρων περικλείονται σε εισαγωγικά.

Ο τύπος int αποθηκεύει ακέραιους αριθμούς, το μέγεθός του είναι απροσδιόριστο - χρειάζεται έως και 4 byte μνήμης, ανάλογα με την αρχιτεκτονική του υπολογιστή.

Μια ρητή μετατροπή μιας μη υπογεγραμμένης μεταβλητής καθορίζεται ως εξής:

Το σιωπηρό μοιάζει με αυτό:

Επιπλέουν και διπλασιάζουν τους αριθμούς με μια τελεία. Οι αριθμοί float αντιπροσωπεύονται ως -2,3 ή 3,34. Το διπλό χρησιμοποιείται για μεγαλύτερη ακρίβεια - περισσότερα ψηφία υποδεικνύονται μετά τον ακέραιο και το κλασματικό διαχωριστικό. Αυτός ο τύπος καταλαμβάνει περισσότερο χώρο στη μνήμη από το float.

Το Void έχει μια κενή τιμή. Ορίζει συναρτήσεις που δεν επιστρέφουν τίποτα. Αυτός ο προσδιοριστής καθορίζει μια κενή τιμή σε ορίσματα μεθόδου. Οι δείκτες, που μπορούν να δεχτούν οποιονδήποτε τύπο δεδομένων, ορίζονται επίσης ως άκυροι.

Boolean τύπου Bool

Χρησιμοποιείται σε δοκιμές κατάστασης και βρόχους. Έχει μόνο δύο έννοιες:

  • αληθής;
  • ψέμα.

Οι τιμές Boolean μπορούν να μετατραπούν σε τιμή int. Το true ισοδυναμεί με ένα, το false ισοδυναμεί με μηδέν. Η μετατροπή τύπου είναι δυνατή μόνο μεταξύ bool και int, διαφορετικά ο μεταγλωττιστής θα εμφανίσει σφάλμα.

if (x) ( //Σφάλμα: "Δεν είναι δυνατή η σιωπηρή μετατροπή του τύπου "int" σε "bool""

if (x != 0) // Ο τρόπος C#

Συμβολοσειρές και Πίνακες

Οι πίνακες είναι σύνθετοι τύποι δεδομένων στο C. Το PL δεν λειτουργεί με συμβολοσειρές με τον ίδιο τρόπο όπως η Javascript ή η Ruby. Στο C, όλες οι συμβολοσειρές είναι πίνακες στοιχείων με τιμή χαρακτήρα. Οι γραμμές τελειώνουν με ένα μηδενικό byte "

Τελευταία ενημέρωση: 17/09/2017

Κάθε μεταβλητή έχει έναν συγκεκριμένο τύπο. Και αυτός ο τύπος καθορίζει ποιες τιμές μπορεί να έχει μια μεταβλητή, ποιες λειτουργίες μπορούν να εκτελεστούν σε αυτήν και πόσα byte στη μνήμη θα καταλάβει. Οι ακόλουθοι βασικοί τύποι δεδομένων ορίζονται στη γλώσσα C++:

    bool : boolean τύπος. Μπορεί να λάβει μία από τις δύο τιμές: true και false. Το αποτύπωμα μνήμης για αυτόν τον τύπο δεν έχει καθοριστεί με ακρίβεια.

    char : Αντιπροσωπεύει έναν μεμονωμένο χαρακτήρα ASCII. Καταλαμβάνει 1 byte (8 bit) στη μνήμη. Μπορεί να αποθηκεύσει οποιαδήποτε τιμή από -128 έως 127 ή από 0 έως 255

    υπογεγραμμένος χαρακτήρας: Αντιπροσωπεύει έναν μεμονωμένο χαρακτήρα. Καταλαμβάνει 1 byte (8 bit) στη μνήμη. Μπορεί να αποθηκεύσει οποιαδήποτε τιμή από -128 έως 127

    ανυπόγραφος χαρακτήρας: Αντιπροσωπεύει έναν μεμονωμένο χαρακτήρα. Καταλαμβάνει 1 byte (8 bit) στη μνήμη. Μπορεί να αποθηκεύσει οποιαδήποτε τιμή από 0 έως 255

    wchar_t : Αντιπροσωπεύει έναν ευρύ χαρακτήρα. Στα Windows καταλαμβάνει 2 byte (16 bit) μνήμης, στο Linux παίρνει 4 byte (32 bit). Μπορεί να αποθηκεύσει οποιαδήποτε τιμή από το εύρος από 0 έως 65.535 (για 2 byte) ή από 0 έως 4.294.967.295 (για 4 byte)

    char16_t : Αντιπροσωπεύει έναν μοναδικό χαρακτήρα Unicode. Καταλαμβάνει 2 byte (16 bit) στη μνήμη. Μπορεί να αποθηκεύσει οποιαδήποτε τιμή από 0 έως 65.535

    char32_t : Αντιπροσωπεύει έναν μεμονωμένο χαρακτήρα Unicode. Καταλαμβάνει 4 byte (32 bit) στη μνήμη. Μπορεί να αποθηκεύσει οποιαδήποτε τιμή από 0 έως 4.294.967.295

    short : Αντιπροσωπεύει έναν ακέραιο στην περιοχή –32768 έως 32767. Καταλαμβάνει 2 byte (16 bit) μνήμης.

    Αυτός ο τύπος έχει επίσης συνώνυμα short int, signed short int, signed short.

    ανυπόγραφο σύντομο: Αντιπροσωπεύει έναν ακέραιο στην περιοχή από 0 έως 65535. Καταλαμβάνει 2 byte (16 bit) μνήμης.

    Αυτός ο τύπος έχει επίσης ένα συνώνυμο unsigned short int .

    int: αντιπροσωπεύει έναν ακέραιο. Ανάλογα με την αρχιτεκτονική του επεξεργαστή, μπορεί να καταλαμβάνει 2 byte (16 bit) ή 4 byte (32 bit). Το εύρος των οριακών τιμών κατά συνέπεια μπορεί επίσης να ποικίλλει από –32768 έως 32767 (με 2 byte) ή από −2.147.483.648 έως 2.147.483.647 (με 4 byte). Αλλά σε κάθε περίπτωση, το μέγεθος πρέπει να είναι μεγαλύτερο ή ίσο με το μέγεθος του κοντού τύπου και μικρότερο ή ίσο με το μέγεθος του μακριού τύπου

    Αυτός ο τύπος έχει συνώνυμα υπογεγραμμένα και υπογεγραμμένα.

    unsigned int : Αντιπροσωπεύει έναν θετικό ακέραιο. Ανάλογα με την αρχιτεκτονική του επεξεργαστή, μπορεί να καταλαμβάνει 2 byte (16 bit) ή 4 byte (32 bit) και εξαιτίας αυτού, το εύρος των οριακών τιμών μπορεί να ποικίλλει: από 0 έως 65535 (για 2 byte) ή από 0 έως 4.294.967.295 (για 4 byte).

    Το unsigned μπορεί να χρησιμοποιηθεί ως συνώνυμο αυτού του τύπου

    long : Αντιπροσωπεύει έναν ακέραιο αριθμό στο εύρος −2.147.483.648 έως 2.147.483.647 Καταλαμβάνει 4 byte (32 bit) μνήμης.

    Αυτός ο τύπος έχει επίσης συνώνυμα long int , signed long int και signed long

    unsigned long: Αντιπροσωπεύει έναν ακέραιο αριθμό από 0 έως 4.294.967.295 Καταλαμβάνει 4 byte (32 bit) μνήμης.

    Έχει το συνώνυμο unsigned long int .

    long long : Αντιπροσωπεύει έναν ακέραιο στην περιοχή −9,223,372,036,854,775,808 έως +9,223,372,036,854,775,807 συνήθως 8 byte (64 bit) μνήμης.

    Έχει συνώνυμα long long int , signed long long int και signed long long .

    unsigned long long : Αντιπροσωπεύει έναν ακέραιο αριθμό στην περιοχή από 0 έως 18.446.744.073.709.551.615 Τυπικά 8 byte (64 bit).

    Έχει το συνώνυμο unsigned long long int .

    float : Αντιπροσωπεύει έναν πραγματικό αριθμό κινητής υποδιαστολής μονής ακρίβειας στην περιοχή +/- 3,4E-38 έως 3,4E+38. Καταλαμβάνει 4 byte (32 bit) στη μνήμη

    double : Αντιπροσωπεύει έναν πραγματικό αριθμό κινητής υποδιαστολής διπλής ακρίβειας στην περιοχή +/- 1,7E-308 έως 1,7E+308. Καταλαμβάνει 8 byte (64 bit) στη μνήμη

    long double : Αντιπροσωπεύει έναν πραγματικό αριθμό κινητής υποδιαστολής διπλής ακρίβειας τουλάχιστον 8 byte (64 bit). Ανάλογα με το μέγεθος της κατειλημμένης μνήμης, το εύρος των έγκυρων τιμών μπορεί να διαφέρει.

    void : πληκτρολογήστε χωρίς τιμή

Έτσι, όλοι οι τύποι δεδομένων εκτός από το void μπορούν να χωριστούν σε τρεις ομάδες: χαρακτήρες (char, wchar_t, char16_t, char32_t), ακέραιοι (short, int, long, long long) και τύπους αριθμών κινητής υποδιαστολής (float, double, long double).

Τύποι χαρακτήρων

Οι τύποι που χρησιμοποιούνται για την αναπαράσταση χαρακτήρων στην εφαρμογή είναι char, wchar_t, char16_t και char32_t.

Ας ορίσουμε πολλές μεταβλητές:

Char c="d"; wchar_t d="c";

Μια μεταβλητή char παίρνει ως τιμή έναν χαρακτήρα σε μεμονωμένα εισαγωγικά: char c = "d" . Μπορείτε επίσης να αντιστοιχίσετε έναν αριθμό από το εύρος που καθορίζεται παραπάνω στη λίστα: char c = 120 . Σε αυτήν την περίπτωση, η τιμή της μεταβλητής c θα είναι ο χαρακτήρας που έχει τον κωδικό 120 στον πίνακα χαρακτήρων ASCII.

Αξίζει να λάβετε υπόψη ότι για την έξοδο χαρακτήρων wchar_t στην κονσόλα, δεν πρέπει να χρησιμοποιήσετε το std::cout, αλλά τη ροή std::wcout:

#συμπεριλαμβάνω int main() ( char a = "H"; wchar_t b = "e"; std::wcout<< a << b << "\n"; return 0; }

Σε αυτήν την περίπτωση, η ροή std::wcout μπορεί να λειτουργήσει τόσο με το char όσο και με το wchar_t. Και η ροή std::cout για τη μεταβλητή wchar_t θα παράγει τον αριθμητικό της κώδικα αντί για έναν χαρακτήρα.

Το πρότυπο C++11 πρόσθεσε τους τύπους char16_t και char32_t, οι οποίοι προσανατολίζονται στη χρήση Unicode. Ωστόσο, τα νήματα για εργασία με αυτούς τους τύπους δεν έχουν ακόμη εφαρμοστεί σε επίπεδο λειτουργικού συστήματος. Επομένως, εάν πρέπει να εμφανίσετε τις τιμές των μεταβλητών αυτών των τύπων στην κονσόλα, πρέπει να μετατρέψετε τις μεταβλητές σε τύπους char ή wchar_t:

#συμπεριλαμβάνω int main() ( char a = "H"; wchar_t b = "e"; char16_t c = "l"; char32_t d = "o"; std::cout<< a << (char)b << (char)c << (char)d << "\n"; return 0; }

Σε αυτήν την περίπτωση, κατά την έξοδο, των μεταβλητών προηγείται μια λειτουργία cast στον τύπο char - (char) , λόγω της οποίας οι τιμές των μεταβλητών b, c και d μετατρέπονται στον τύπο char και μπορούν να εξάγονται σε την κονσόλα χρησιμοποιώντας τη ροή std::cout.

Ακέραιοι τύποι

Οι ακέραιοι τύποι αντιπροσωπεύονται από τους ακόλουθους τύπους: short, unsigned short, int, unsigned int, long, unsigned long, long long και unsigned long long:

Σύντομο a = -10; ανυπόγραφο σύντομο b= 10; int c = -30; ανυπόγραφο int d = 60; μήκος e = -170; ανυπόγραφο μακρύ f = 45; μακρύ μακρύ g = 89;

Τύποι αριθμών κινητής υποδιαστολής

Οι τύποι κινητής υποδιαστολής και κλασματικών αριθμών αντιπροσωπεύονται από float, double και long double:

Float a = -10,45; διπλό b = 0,00105; μακρύ διπλό c = 30,890045;

Μεγέθη τύπων δεδομένων

Η παραπάνω λίστα δείχνει για κάθε τύπο το μέγεθος που καταλαμβάνει στη μνήμη. Ωστόσο, αξίζει να σημειωθεί ότι οι προγραμματιστές μεταγλωττιστή μπορούν να επιλέξουν ανεξάρτητα τα όρια μεγέθους για τους τύπους, με βάση τις δυνατότητες υλικού του υπολογιστή. Το πρότυπο ορίζει μόνο τις ελάχιστες τιμές που πρέπει να είναι. Για παράδειγμα, για τους τύπους int και short η ελάχιστη τιμή είναι 16 bit, για τον long type - 32 bit, για τον long double type. Σε αυτήν την περίπτωση, το μέγεθος του μακριού τύπου δεν πρέπει να είναι μικρότερο από το μέγεθος του τύπου int και το μέγεθος του τύπου int δεν πρέπει να είναι μικρότερο από το μέγεθος του κοντού τύπου και το μέγεθος του μακριού διπλού τύπου πρέπει είναι μεγαλύτερο από το διπλάσιο. Για παράδειγμα, ο μεταγλωττιστής g++ για Windows χρησιμοποιεί 12 byte για μεγάλα διπλάσια και ο μεταγλωττιστής που είναι ενσωματωμένος στο Visual Studio και εκτελείται επίσης στα Windows χρησιμοποιεί 8 byte για μεγάλους διπλούς. Δηλαδή, ακόμη και μέσα στην ίδια πλατφόρμα, διαφορετικοί μεταγλωττιστές μπορεί να προσεγγίζουν διαφορετικά τα μεγέθη ορισμένων τύπων δεδομένων. Αλλά γενικά, χρησιμοποιούνται τα μεγέθη που υποδεικνύονται παραπάνω κατά την περιγραφή τύπων δεδομένων.

Ωστόσο, υπάρχουν περιπτώσεις όπου είναι απαραίτητο να γνωρίζουμε ακριβώς το μέγεθος ενός συγκεκριμένου τύπου. Και για αυτό, η C++ έχει τον τελεστή sizeof(), ο οποίος επιστρέφει το μέγεθος της μνήμης σε byte που καταλαμβάνει η μεταβλητή:

#συμπεριλαμβάνω int main() ( long double number = 2; std::cout<< "sizeof(number) =" << sizeof(number); return 0; }

Έξοδος κονσόλας κατά τη μεταγλώττιση σε g++:

sizeof(number) = 12

Ταυτόχρονα, κατά τον ορισμό μεταβλητών, είναι σημαντικό να κατανοήσουμε ότι η τιμή μιας μεταβλητής δεν πρέπει να υπερβαίνει τα όρια που περιγράφονται για τον τύπο της. Για παράδειγμα:

Ανυπόγραφος σύντομος αριθμός = -65535;

Ο μεταγλωττιστής G++, κατά τη μεταγλώττιση ενός προγράμματος με αυτήν τη γραμμή, θα δημιουργήσει ένα σφάλμα που δηλώνει ότι η τιμή -65535 δεν βρίσκεται εντός του εύρους των έγκυρων τιμών για τον ανυπόγραφο σύντομο τύπο και θα περικοπεί.

Στο Visual Studio, η μεταγλώττιση μπορεί να προχωρήσει χωρίς σφάλματα, αλλά η μεταβλητή αριθμός θα λάβει την τιμή 2 - το αποτέλεσμα της μετατροπής του αριθμού -65535 σε έναν ανυπόγραφο σύντομο τύπο. Δηλαδή και πάλι το αποτέλεσμα δεν θα είναι ακριβώς το αναμενόμενο. Η τιμή μιας μεταβλητής είναι απλώς μια συλλογή από bit στη μνήμη που ερμηνεύονται σύμφωνα με έναν συγκεκριμένο τύπο. Και για διαφορετικούς τύπους, το ίδιο σύνολο bit μπορεί να ερμηνευτεί διαφορετικά. Επομένως, είναι σημαντικό να λαμβάνετε υπόψη τα εύρη τιμών για έναν δεδομένο τύπο όταν εκχωρείτε μια τιμή σε μια μεταβλητή.

αυτόματος προσδιοριστής

Μερικές φορές μπορεί να είναι δύσκολο να προσδιοριστεί ο τύπος της έκφρασης. Και σύμφωνα με τα πιο πρόσφατα πρότυπα, μπορείτε να αφήσετε τον μεταγλωττιστή να συμπεράνει τον τύπο του ίδιου του αντικειμένου. Και ο αυτόματος προσδιοριστής χρησιμοποιείται για αυτό. Επιπλέον, εάν ορίσουμε μια μεταβλητή με τον αυτόματο προσδιοριστή, αυτή η μεταβλητή πρέπει να αρχικοποιηθεί με κάποια τιμή:

Αυτόματος αριθμός = 5;

Με βάση την εκχωρημένη τιμή, ο μεταγλωττιστής θα συμπεράνει τον τύπο της μεταβλητής. Δεν επιτρέπονται οι μη αρχικοποιημένες μεταβλητές με τον αυτόματο προσδιοριστή.

Οι μεταβλητές χρησιμοποιούνται για την αποθήκευση διαφόρων δεδομένων σε γλώσσες προγραμματισμού. Μια μεταβλητή είναι μια περιοχή της μνήμης που έχει ένα όνομα, αλλιώς ονομάζεται αναγνωριστικό.

Δίνοντας ένα όνομα σε μια μεταβλητή, ο προγραμματιστής ονομάζει ταυτόχρονα την περιοχή μνήμης όπου θα γραφτούν οι τιμές της μεταβλητής για αποθήκευση.

Είναι καλό να ονομάζουμε μεταβλητές με νόημα. Επιτρέπεται η χρήση πεζών και κεφαλαίων γραμμάτων, αριθμών και η κάτω παύλα, που θεωρείται γράμμα στο C. Ο πρώτος χαρακτήρας πρέπει να είναι ένα γράμμα και δεν πρέπει να υπάρχουν κενά στο όνομα της μεταβλητής. Στις σύγχρονες εκδόσεις μεταγλωττιστών, το μήκος του ονόματος είναι πρακτικά απεριόριστο. Το όνομα της μεταβλητής δεν μπορεί να ταιριάζει με τις δεσμευμένες λέξεις-κλειδιά. Τα κεφαλαία και τα πεζά γράμματα στα ονόματα των μεταβλητών είναι διαφορετικά, μεταβλητές έναΚαι ΕΝΑ- διαφορετικές μεταβλητές.

Δεσμευμένες λέξεις-κλειδιά auto double int struct break other long switch register tupedef char extern return void case float unsigned default for signed union do if sizeof volatile συνέχεια enum short while
Στο C, όλες οι μεταβλητές πρέπει να δηλωθούν. Αυτό σημαίνει ότι, πρώτον, στην αρχή κάθε προγράμματος ή συνάρτησης πρέπει να παρέχετε μια λίστα με όλες τις μεταβλητές που χρησιμοποιούνται και, δεύτερον, να υποδείξετε τον τύπο καθεμιάς από αυτές.

Όταν δηλώνεται μια μεταβλητή, ο μεταγλωττιστής εκχωρεί χώρο στη μνήμη για αυτήν ανάλογα με τον τύπο της. Χρησιμοποιώντας τυπικά εργαλεία AVR GCC, λειτουργεί με τύπους δεδομένων απανθρακώνω(τύπος χαρακτήρα) και ενθ(ακέραιος τύπος).

Μεταβλητοί τύποι

Πληκτρολογήστε char

απανθρακώνω- είναι ο πιο οικονομικός τύπος. Ο τύπος χαρακτήρων μπορεί να είναι υπογεγραμμένος ή χωρίς υπογραφή. Σημειώνεται αναλόγως ως " υπογεγραμμένο χαρ" (υπογεγραμμένος τύπος) και " ανυπόγραφο χαρ" (μη υπογεγραμμένος τύπος). Ο υπογεγραμμένος τύπος μπορεί να αποθηκεύσει τιμές στην περιοχή από -128 έως +127. Χωρίς υπογραφή - από 0 έως 255. Μια μεταβλητή char έχει 1 byte μνήμης (8 bit).

Λέξεις-κλειδιά (τροποποιητές) υπογεγραμμένοςΚαι ανυπόγραφουποδεικνύουν πώς ερμηνεύεται το μηδενικό bit της δηλωμένης μεταβλητής, δηλαδή, εάν η λέξη-κλειδί χωρίς υπογραφή έχει καθοριστεί, τότε το μηδενικό bit ερμηνεύεται ως μέρος ενός αριθμού, διαφορετικά το μηδενικό bit ερμηνεύεται ως υπογεγραμμένο.

Πληκτρολογήστε int

Ακέραια τιμή ενθΜπορεί να είναι μικρός(σύντομη) ή μακρύς(μακρύς).

Λέξη-κλειδί (τροποποιητής) μικρόςτοποθετείται μετά από λέξεις-κλειδιά υπογεγραμμένοςή ανυπόγραφο. Έτσι, διακρίνονται οι ακόλουθοι τύποι: υπογεγραμμένο κοντό int, ανυπόγραφο short int, υπογεγραμμένο long int, ανυπόγραφο long int.

Μεταβλητή τύπου υπογεγραμμένο σύντομο ενθ(υπογεγραμμένος σύντομος ακέραιος) μπορεί να πάρει τιμές από -32768 έως +32767, ανυπόγραφο σύντομο ενθ(ανυπόγραφος σύντομος ακέραιος) - από 0 έως 65535. Ακριβώς δύο byte μνήμης (16 bit) εκχωρούνται για καθένα από αυτά.

Κατά τη δήλωση μιας μεταβλητής τύπου υπογεγραμμένο σύντομο ενθλέξεις-κλειδιά υπογεγραμμένοςΚαι μικρόςμπορεί να παραλειφθεί και ένας τέτοιος τύπος μεταβλητής μπορεί να δηλωθεί απλά ενθ. Είναι επίσης δυνατό να δηλώσετε αυτόν τον τύπο με μία λέξη-κλειδί μικρός.

Μεταβλητός ανυπόγραφο σύντομο ενθμπορεί να δηλωθεί ως ανυπόγραφο ενθή ανυπόγραφο σύντομο.

Για κάθε μέγεθος υπογεγραμμένος μακρύς ενθή ανυπόγραφο μακρύ ενθΕκχωρούνται 4 byte μνήμης (32 bit). Οι τιμές των μεταβλητών αυτού του τύπου μπορούν να κυμαίνονται από -2147483648 έως 2147483647 και από 0 έως 4294967295, αντίστοιχα.

Υπάρχουν επίσης μεταβλητές όπως μακρά μακρά ενθ, για το οποίο εκχωρούνται 8 byte μνήμης (64 bit). Μπορούν επίσης να είναι υπογεγραμμένα ή ανυπόγραφα. Για έναν υπογεγραμμένο τύπο, το εύρος τιμών είναι από -9223372036854775808 έως 9223372036854775807, για ανυπόγραφο τύπο - από 0 έως 184467440737095551615. Ένας υπογεγραμμένος τύπος μπορεί να δηλωθεί απλώς με δύο λέξεις-κλειδιά μακρύ μακρύ.

Τύπος Σειρά Εξαγωνικό εύρος Μέγεθος
ανυπόγραφο χαρ 0 ... 255 0x00...0xFF 8 bit
υπογεγραμμένο χαρ
ή απλώς
απανθρακώνω
-128 ... 127 -0x80...0x7F 8 bit
ανυπόγραφο σύντομο ενθ
ή απλώς
ανυπόγραφο ενθή ανυπόγραφο σύντομο
0 ... 65535 0x0000 ... 0xFFFF 16 bit
υπογεγραμμένο σύντομο ενθή υπογεγραμμένο ενθ
ή απλώς
μικρόςή ενθ
-32768 ... 32767 0x8000...0x7FFF 16 bit
ανυπόγραφο μακρύ ενθ
ή απλώς
ανυπόγραφο μακρύ
0 ... 4294967295 0x00000000 ... 0xFFFFFFFF 32 bit
υπογεγραμμένο μακρύ
ή απλώς
μακρύς
-2147483648 ... 2147483647 0x80000000 ... 0x7ΦΦΦΦΦΦ 32 bit
ανυπόγραφο μακρύ μακρύ 0 ... 18446744073709551615 0x00000000000000000 ... 0xFFFFFFFFFFFFFFFFFFFF 64 bit
υπογεγραμμένο μακροχρόνιο
ή απλώς
μακρύ μακρύ
-9223372036854775808 ... 9223372036854775807 0x80000000000000000 ... 0x7FFFFFFFFFFFFFFFFF 64 bit

Οι μεταβλητές δηλώνονται σε μια δήλωση δήλωσης. Μια δήλωση δήλωσης αποτελείται από μια προδιαγραφή τύπου και μια λίστα ονομάτων μεταβλητών διαχωρισμένων με κόμματα. Πρέπει να υπάρχει ένα ερωτηματικό στο τέλος.

Μια δήλωση μεταβλητής έχει την ακόλουθη μορφή:

[modifiers] type_specifier identifier [, identifier] ...

Τροποποιητές- λέξεις-κλειδιά υπογεγραμμένος, ανυπόγραφο, μικρός, μακρύς.
Προσδιοριστής τύπου- λέξη-κλειδί απανθρακώνωή ενθ, το οποίο καθορίζει τον τύπο της δηλωμένης μεταβλητής.
Αναγνωριστικό- όνομα μεταβλητής.

Παράδειγμα: char x;
int a, b, c; ανυπόγραφο μακρύ μακρύ y?, ένα, Με αυτόν τον τρόπο θα δηλωθούν οι μεταβλητές, x, σιντο ανυπόγραφο μακρύ μακρύ y? y ένα, Με αυτόν τον τρόπο θα δηλωθούν οι μεταβλητές, x. Σε μια μεταβλητή σιθα είναι δυνατή η εγγραφή τιμών από -128 έως 127. Σε μεταβλητές

- από -32768 έως +32767. Σε μια μεταβλητή

- από 0 έως 18446744073709551615. ανυπόγραφο μακρύ μακρύ y?Αρχικοποίηση της τιμής μιας μεταβλητής κατά τη δήλωση

Όταν δηλώνεται, μια μεταβλητή μπορεί να αρχικοποιηθεί, δηλαδή να εκχωρηθεί μια αρχική τιμή. Μπορείτε να το κάνετε ως εξής.

int x = 100; Έτσι, στη μεταβλητή

Όταν ανακοινωθεί, ο αριθμός 100 θα γραφτεί αμέσως. Είναι καλύτερα να αποφύγετε την ανάμειξη αρχικοποιημένων μεταβλητών σε μία δήλωση δήλωσης, δηλαδή, είναι καλύτερο να δηλώνετε αρχικοποιημένες μεταβλητές σε ξεχωριστές γραμμές.Σταθερές Είναι καλύτερα να αποφύγετε την ανάμειξη αρχικοποιημένων μεταβλητών σε μία δήλωση δήλωσης, δηλαδή, είναι καλύτερο να δηλώνετε αρχικοποιημένες μεταβλητές σε ξεχωριστές γραμμές.Μια μεταβλητή οποιουδήποτε τύπου μπορεί να δηλωθεί μη τροποποιήσιμη. Αυτό επιτυγχάνεται με την προσθήκη της λέξης-κλειδιού Είναι καλύτερα να αποφύγετε την ανάμειξη αρχικοποιημένων μεταβλητών σε μία δήλωση δήλωσης, δηλαδή, είναι καλύτερο να δηλώνετε αρχικοποιημένες μεταβλητές σε ξεχωριστές γραμμές.συνθ ενθή στον προσδιοριστή τύπου. Μεταβλητές με τύποσύμφωνα με την τιμή της σταθεράς: αν η σταθερά είναι μικρότερη από 32768, τότε της εκχωρείται ο τύπος ενθ, αλλιώς στον προσδιοριστή τύπου. Μεταβλητές με τύπο.

Παράδειγμα: const long int k = 25; const m = -50;// εννοείται const int m=-50 const n = 100000;

// υποδηλώνει const long int n=100000

Εκχώρηση

Το σύμβολο "=" χρησιμοποιείται για την ανάθεση στο C. Η έκφραση στα δεξιά του πρόσημου εκχώρησης αξιολογείται και η τιμή που προκύπτει εκχωρείται στη μεταβλητή στα αριστερά του πρόσημου εκχώρησης. Σε αυτήν την περίπτωση, η προηγούμενη τιμή που είναι αποθηκευμένη στη μεταβλητή διαγράφεται και αντικαθίσταται με μια νέα.
Ο τελεστής "=" δεν πρέπει να νοείται ως ισότητα.

Για παράδειγμα, η έκφραση a = 5; θα πρέπει να διαβαστεί ως "εκχώρηση μεταβλητής a στο 5". Παραδείγματα: x = 5 + 3;// προσθέστε τις τιμές 5 και 3, // αντιστοιχίστε το αποτέλεσμα στη μεταβλητή x (γράψτε στη μεταβλητή x) b = a + 4;// προσθέστε 4 στην τιμή που είναι αποθηκευμένη στη μεταβλητή a, // εκχωρήστε το αποτέλεσμα που προκύπτει στη μεταβλητή b (εγγραφή στη μεταβλητή b) b = b + 2;
// προσθέστε 2 στην τιμή που είναι αποθηκευμένη στη μεταβλητή b, // εκχωρήστε το αποτέλεσμα που προκύπτει στη μεταβλητή b (εγγραφή στη μεταβλητή b)

Στη δεξιά πλευρά, η τιμή της μεταβλητής μπορεί να χρησιμοποιηθεί πολλές φορές: c = b * b + 3 * b; Παράδειγμα: x = 3;// στη μεταβλητή x θα εκχωρηθεί η τιμή 3 y = x + 5;// ο αριθμός 5 θα προστεθεί στην τιμή που είναι αποθηκευμένη στη μεταβλητή x, // το αποτέλεσμα που προκύπτει θα γραφτεί στη μεταβλητή y z = x * y;// οι τιμές των μεταβλητών x και y θα πολλαπλασιαστούν, // το αποτέλεσμα θα γραφτεί στη μεταβλητή z z = z - 1;
// 1 θα αφαιρεθεί από την τιμή που είναι αποθηκευμένη στη μεταβλητή z // το αποτέλεσμα θα γραφτεί στη μεταβλητή z Έτσι, στη μεταβλητή z

ο αριθμός 23 θα αποθηκευτεί
Εκτός από τον απλό τελεστή ανάθεσης "=", υπάρχουν αρκετοί ακόμη συνδυασμένοι τελεστές ανάθεσης στο C: "+=", "-=", "*= Παραδείγματα: x += y;// ίδιο με x = x + y; - προσθέστε x και y // και γράψτε το αποτέλεσμα στη μεταβλητή x x -= y;// ίδιο με x = x - y; - αφαιρέστε την τιμή y από το x // και γράψτε το αποτέλεσμα στη μεταβλητή x x *= y;// ίδιο με x = x * y; - πολλαπλασιάστε το x με το y // και γράψτε το αποτέλεσμα στη μεταβλητή x x /= y;// ίδιο με το x = x / y; - διαιρέστε το x με το y // και γράψτε το αποτέλεσμα στη μεταβλητή x x %= y;

// ίδιο με x = x % y;

// υπολογίστε το υπόλοιπο ακέραιου αριθμού κατά τη διαίρεση του x με το y // και γράψτε το αποτέλεσμα στη μεταβλητή x Αύξηση και μείωσηή Εάν πρέπει να αλλάξετε την τιμή μιας μεταβλητής σε 1, χρησιμοποιήστε.

αύξησημείωση

Αύξηση // η τιμή της μεταβλητής x θα αυξηθεί κατά 1$WinAVR = ($_GET["avr"]); if($WinAVR) περιλαμβάνει($WinAVR);?>
Μείωση- τη λειτουργία μείωσης της τιμής που είναι αποθηκευμένη σε μια μεταβλητή κατά 1.

Παράδειγμα: x--; // η τιμή της μεταβλητής x θα μειωθεί κατά 1
Η αύξηση και η μείωση είναι τελεστές εκχώρησης. Όταν χρησιμοποιείτε τη μείωση και την αύξηση μαζί με τον τελεστή εκχώρησης "=", χρησιμοποιήστε συμβολισμό postfix (x++) ή πρόθεμα (++x). Η καταχώρηση του προθέματος εκτελείται πρώτα.

Παραδείγματα: y = x++;
Ας υποθέσουμε ότι στη μεταβλητή ανυπόγραφο μακρύ μακρύ y?Η τιμή 5 αποθηκεύτηκε στη συνέχεια σιθα γραφεί η τιμή 5 και μετά η τιμή της μεταβλητής ανυπόγραφο μακρύ μακρύ y?θα αυξηθεί κατά 1. Έτσι, σε σιθα είναι 5, και μέσα ανυπόγραφο μακρύ μακρύ y?- 6. y = --x;
Αν μέσα ανυπόγραφο μακρύ μακρύ y?Εάν η τιμή 5 ήταν αποθηκευμένη, τότε πρώτα θα πραγματοποιηθεί η μείωση ανυπόγραφο μακρύ μακρύ y?σε 4 και στη συνέχεια αυτή η τιμή θα εκχωρηθεί στη μεταβλητή σι. Ετσι, ανυπόγραφο μακρύ μακρύ y?Και σιθα εκχωρηθεί η τιμή 4.

Αυτό το φύλλο εξαπάτησης παρέχει πληροφορίες σχετικά με τους κύριους τύπους δεδομένων της γλώσσας προγραμματισμού C++ και τα χαρακτηριστικά της υλοποίησής τους. Επίσης, στο τέλος της εγγραφής υπάρχει ένας πίνακας με τα εύρη τιμών αυτών των τύπων.

Έννοια τύπου δεδομένων

Ο κύριος σκοπός κάθε προγράμματος είναι η επεξεργασία δεδομένων. Διαφορετικοί τύποι δεδομένων αποθηκεύονται και υφίστανται επεξεργασία με διαφορετικό τρόπο. Σε οποιαδήποτε αλγοριθμική γλώσσα, κάθε σταθερά, μεταβλητή, έκφραση ή συνάρτηση πρέπει να έχει έναν συγκεκριμένο τύπο.

Ο τύπος δεδομένων ορίζει:

  • εσωτερική αναπαράσταση δεδομένων στη μνήμη του υπολογιστή.
  • το σύνολο των τιμών που μπορούν να λάβουν ποσότητες αυτού του τύπου.
  • λειτουργίες και λειτουργίες που μπορούν να εφαρμοστούν σε ποσότητες αυτού του τύπου.

Με βάση αυτά τα χαρακτηριστικά, ο προγραμματιστής επιλέγει τον τύπο κάθε ποσότητας που χρησιμοποιείται στο πρόγραμμα για να αναπαραστήσει πραγματικά αντικείμενα. Μια απαιτούμενη δήλωση τύπου επιτρέπει στον μεταγλωττιστή να ελέγχει την εγκυρότητα διαφόρων δομών προγράμματος. Ο τύπος της τιμής καθορίζει τις οδηγίες του μηχανήματος που θα χρησιμοποιηθούν για την επεξεργασία των δεδομένων.

Όλοι οι τύποι γλώσσας C++ μπορούν να χωριστούν σε βασικός Και σύνθετος . Η γλώσσα C++ ορίζει έξι κύριοςτύπους δεδομένων για την αναπαράσταση ακέραιων, πραγματικών, χαρακτήρων και λογικών τιμών. Με βάση αυτούς τους τύπους, ο προγραμματιστής μπορεί να εισάγει μια περιγραφή σύνθετοςτύπους. Αυτά περιλαμβάνουν πίνακες, απαριθμήσεις, συναρτήσεις, δομές, αναφορές, δείκτες, ενώσεις και κλάσεις.

Βασικοί τύποι δεδομένων στη C++

Οι βασικοί (τυπικοί) τύποι δεδομένων ονομάζονται συχνά αριθμητικοί επειδή μπορούν να χρησιμοποιηθούν σε αριθμητικές πράξεις. Για να περιγραφούν οι κύριοι τύποι, ορίζονται τα ακόλουθα:

  1. int(int);
  2. char(char);
  3. wchar_t(widechar);
  4. bool(boolean);
  5. float (πραγματικό);
  6. διπλή (πραγματική διπλή ακρίβεια).

Οι πρώτοι τέσσερις τύποι ονομάζονται ακέραιοι ( ολόκληρο ), τα δύο τελευταία - τύπους κινητής υποδιαστολής . Ο κώδικας που δημιουργεί ο μεταγλωττιστής για την επεξεργασία τιμών ακεραίων είναι διαφορετικός από τον κώδικα για τιμές κινητής υποδιαστολής.

Υπάρχουν τέσσερις προσδιοριστής τύπου , διευκρινίζοντας την εσωτερική αναπαράσταση και το εύρος τιμών των τυπικών τύπων:

  • σύντομη (σύντομη)?
  • long(long)?
  • υπογεγραμμένο(υπογεγραμμένο);
  • ανυπόγραφο.

Ακέραιος τύπος (int)

Το μέγεθος του τύπου int δεν καθορίζεται από το πρότυπο, αλλά εξαρτάται από τον υπολογιστή και τον μεταγλωττιστή. Για έναν επεξεργαστή 16 bit, εκχωρούνται 2 byte για τιμές αυτού του τύπου, για έναν επεξεργαστή 32 bit - 4 byte.

Ο σύντομος προσδιοριστής πριν από το όνομα τύπου υποδεικνύει στον μεταγλωττιστή ότι πρέπει να εκχωρηθούν 2 byte για τον αριθμό, ανεξάρτητα από τη χωρητικότητα του επεξεργαστή. Ο προσδιοριστής long σημαίνει ότι η ακέραια τιμή θα καταλάβει 4 byte. Έτσι, σε έναν υπολογιστή 16-bit τα ισοδύναμα είναι int και short int, και σε έναν υπολογιστή 32-bit τα ισοδύναμα είναι int και long int.

Εσωτερική αναπαράσταση τιμές ακέραιου τύπου - ένας ακέραιος σε δυαδικό κώδικα. Όταν χρησιμοποιείτε τον προσδιοριστή με προσημείωση, το πιο σημαντικό bit του αριθμού ερμηνεύεται ως προσημασμένο (0 είναι θετικός αριθμός, 1 είναι αρνητικός αριθμός). Ο ανυπόγραφος προσδιοριστής επιτρέπει την αναπαράσταση μόνο θετικών αριθμών, καθώς το πιο σημαντικό bit αντιμετωπίζεται ως μέρος του κωδικού του αριθμού. Έτσι, το εύρος τιμών του τύπου int εξαρτάται από τους προσδιοριστές. Τα εύρη τιμών των τιμών ακέραιου τύπου με διάφορους προσδιοριστές για υπολογιστές συμβατούς με IBM PC δίνονται στον πίνακα "Εύρος τιμών απλών τύπων δεδομένων" στο τέλος της καταχώρισης.

Από προεπιλογή, όλοι οι τύποι ακεραίων θεωρούνται υπογεγραμμένοι, που σημαίνει ότι ο προσδιοριστής με υπογραφή μπορεί να παραλειφθεί.

Στις σταθερές που βρίσκονται σε ένα πρόγραμμα εκχωρείται ο ένας ή ο άλλος τύπος ανάλογα με τον τύπο τους. Εάν για κάποιο λόγο ο προγραμματιστής δεν είναι ικανοποιημένος με αυτόν τον τύπο, μπορεί να υποδείξει ρητά τον απαιτούμενο τύπο χρησιμοποιώντας τα επιθήματα L, l (μακρύ) και U, u (ανυπόγραφο). Για παράδειγμα, η σταθερά 32L θα είναι τύπου long και θα καταλαμβάνει 4 byte. Μπορείτε να χρησιμοποιήσετε τα επιθήματα L και U ταυτόχρονα, για παράδειγμα, 0x22UL ή 05Lu.

Σημείωμα

Οι τύποι short int, long int, signed int και unsigned int μπορούν να συντομεύονται σε short, long, signed και unsigned, αντίστοιχα.

Τύπος χαρακτήρα (χαρακτήρας)

Στην τιμή ενός τύπου χαρακτήρων εκχωρείται ένας αριθμός byte που επαρκούν για να φιλοξενήσει οποιονδήποτε χαρακτήρα από το σύνολο χαρακτήρων για έναν δεδομένο υπολογιστή, που είναι αυτό που καθορίζει το όνομα του τύπου. Συνήθως αυτό είναι 1 byte. Ο τύπος char, όπως και άλλοι ακέραιοι τύποι, μπορεί να είναι υπογεγραμμένος ή χωρίς υπογραφή. Οι υπογεγραμμένες τιμές μπορούν να αποθηκεύσουν τιμές στο εύρος -128 έως 127. Χρησιμοποιώντας τον μη υπογεγραμμένο προσδιοριστή, οι τιμές μπορούν να κυμαίνονται από 0 έως 255. Αυτό είναι αρκετό για την αποθήκευση οποιουδήποτε χαρακτήρα στο σύνολο χαρακτήρων ASCII 256 χαρακτήρων. Οι τιμές του τύπου char χρησιμοποιούνται επίσης για την αποθήκευση ακεραίων που δεν υπερβαίνουν τα όρια των καθορισμένων περιοχών.

Εκτεταμένος τύπος χαρακτήρων (wchar_t)

Ο τύπος wchar_t έχει σχεδιαστεί για να λειτουργεί με ένα σύνολο χαρακτήρων για τους οποίους δεν αρκεί 1 byte για την κωδικοποίηση, για παράδειγμα, Unicode. Το μέγεθος αυτού του τύπου εξαρτάται από την υλοποίηση. κατά κανόνα αντιστοιχεί στον τύπο short. Οι σταθερές συμβολοσειράς τύπου wchar_t γράφονται με το πρόθεμα L, για παράδειγμα, L»Gates».

Boolean τύπος (bool)

Οι τιμές Boole μπορούν να λάβουν μόνο τις τιμές true και false, οι οποίες είναι δεσμευμένες λέξεις. Η εσωτερική μορφή αναπαράστασης της τιμής false είναι 0 (μηδέν). Οποιαδήποτε άλλη τιμή ερμηνεύεται ως αληθής. Όταν μετατρέπεται σε ακέραιο τύπο, το true έχει την τιμή 1.

Τύποι κινητής υποδιαστολής (float, double και long double)

Το πρότυπο C++ ορίζει τρεις τύπους δεδομένων για την αποθήκευση πραγματικών τιμών: float, double και long double.

Οι τύποι δεδομένων κινητής υποδιαστολής αποθηκεύονται διαφορετικά στη μνήμη του υπολογιστή από τους τύπους δεδομένων ακεραίων. Η εσωτερική αναπαράσταση ενός πραγματικού αριθμού αποτελείται από δύο μέρη - τη μάντισσα και τον εκθέτη. Σε υπολογιστές που είναι συμβατοί με IBM PC, οι τιμές float καταλαμβάνουν 4 byte, εκ των οποίων ένα δυαδικό ψηφίο εκχωρείται για το σύμβολο mantissa, 8 bit για τον εκθέτη και 23 για το mantissa. Η μάντισσα είναι ένας αριθμός μεγαλύτερος από 1,0 αλλά μικρότερος από 2,0. Δεδομένου ότι το αρχικό ψηφίο της μάντισσας είναι πάντα 1, δεν αποθηκεύεται.

Για διπλές τιμές που καταλαμβάνουν 8 byte, εκχωρούνται 11 και 52 bit για τον εκθέτη και το mantissa, αντίστοιχα. Το μήκος της μάντισσας καθορίζει την ακρίβεια του αριθμού και το μήκος του εκθέτη καθορίζει το εύρος του.Όπως μπορείτε να δείτε από τον πίνακα στο τέλος της καταχώρισης, με τον ίδιο αριθμό byte που έχουν εκχωρηθεί για τιμές float και long int, τα εύρη των επιτρεπόμενων τιμών τους διαφέρουν πολύ λόγω εσωτερικής μορφής αναπαράστασης.

Ο μακρύς προσδιοριστής πριν από ένα όνομα διπλού τύπου υποδεικνύει ότι έχουν εκχωρηθεί 10 byte για την τιμή του.

Οι σταθερές κινητής υποδιαστολής είναι διπλού τύπου από προεπιλογή. Μπορείτε να καθορίσετε ρητά τον τύπο μιας σταθεράς χρησιμοποιώντας τα επιθήματα F, f (float) και L, l (μακρύ). Για παράδειγμα, η σταθερά 2E+6L θα είναι τύπου long double και η σταθερά 1,82f θα είναι τύπου float.

Για να γράψετε προγράμματα που είναι φορητά σε πλατφόρμες, δεν μπορείτε να κάνετε υποθέσεις σχετικά με το μέγεθος του τύπου int. Για να το αποκτήσετε, πρέπει να χρησιμοποιήσετε τη λειτουργία sizeof, το αποτέλεσμα της οποίας είναι το μέγεθος του τύπου σε byte. Για παράδειγμα, για το λειτουργικό σύστημα MS-DOS, το sizeof (int) θα έχει ως αποτέλεσμα 2, αλλά για τα Windows 98 ή OS/2 το αποτέλεσμα θα είναι 4.

Το πρότυπο ANSI δεν καθορίζει εύρη τιμών για βασικούς τύπους ορίζονται μόνο οι σχέσεις μεταξύ των μεγεθών τους, για παράδειγμα:

sizeof(float) ≤ slzeof(διπλό) ≤ sizeof(μακρύ διπλό)
sizeof(char) ≤ slzeof(short) ≤ sizeof(int) ≤ sizeof(long)

Σημείωμα

Οι ελάχιστες και μέγιστες επιτρεπόμενες τιμές για ακέραιους τύπους εξαρτώνται από την υλοποίηση και δίνονται στο αρχείο κεφαλίδας (), χαρακτηριστικά πραγματικών τύπων - στο αρχείο (), καθώς και στο πρότυπο κλάσης numeric_limits

πληκτρολογήστε κενό

Εκτός από αυτούς που αναφέρονται, οι κύριοι τύποι της γλώσσας περιλαμβάνουν τον τύπο κενού, αλλά το σύνολο τιμών αυτού του τύπου είναι κενό. Χρησιμοποιείται για τον ορισμό συναρτήσεων που δεν επιστρέφουν τιμή, για τον καθορισμό μιας κενή λίστας ορισμάτων συνάρτησης, ως τον βασικό τύπο για τους δείκτες και για τις λειτουργίες casting τύπου.

Εύρος τιμών απλών τύπων δεδομένων σε C++ για υπολογιστές συμβατούς με IBM PC

Ε: Τι σημαίνει ο όρος υπολογιστής συμβατός με IBM PC;
Α: Ένας υπολογιστής συμβατός με IBM PC είναι ένας υπολογιστής που βρίσκεται αρχιτεκτονικά κοντά στα IBM PC, XT και AT. Οι υπολογιστές που είναι συμβατοί με IBM PC είναι κατασκευασμένοι σε μικροεπεξεργαστές συμβατούς με τον Intel 8086 (και, όπως γνωρίζετε, όλοι οι μεταγενέστεροι επεξεργαστές Intel είναι πλήρως συμβατοί με τον 8086). Στην πραγματικότητα, αυτοί είναι σχεδόν όλοι οι σύγχρονοι υπολογιστές.

Εισήχθησαν διάφοροι τύποι ακεραίων και πραγματικών τύπων, που διαφέρουν ως προς το εύρος και την ακρίβεια της αναπαράστασης δεδομένων, προκειμένου να δοθεί στον προγραμματιστή η ευκαιρία να χρησιμοποιήσει πιο αποτελεσματικά τις δυνατότητες συγκεκριμένου εξοπλισμού, καθώς η ταχύτητα των υπολογισμών και η ποσότητα της μνήμης εξαρτώνται από την επιλογή του τύπου. Ωστόσο, ένα πρόγραμμα βελτιστοποιημένο για έναν τύπο υπολογιστή μπορεί να μην είναι φορητό σε άλλες πλατφόρμες, επομένως γενικά θα πρέπει να αποφεύγετε να βασίζεστε σε συγκεκριμένα χαρακτηριστικά τύπων δεδομένων.

Τύπος Εύρος τιμών Μέγεθος (byte)
bool αληθινό και ψευδές 1
υπογεγραμμένο χαρ -128 … 127 1
ανυπόγραφο χαρ 0 … 255 1
υπογεγραμμένο σύντομο ενθ -32 768 … 32 767 2
ανυπόγραφο σύντομο ενθ 0 … 65 535 2
υπογεγραμμένος μακρύς ενθ -2 147 483 648 … 2 147 483 647 4
ανυπόγραφο μακρύ ενθ 0 … 4 294 967 295 4
φλοτέρ 3.4e-38 … 3.4e+38 4
διπλό 1.7e-308 … 1.7C+308 8
μακρύ διπλό 3.4e-4932 … 3.4e+4932 10

Για πραγματικούς τύπους, ο πίνακας δείχνει τις απόλυτες τιμές των ελάχιστων και μέγιστων τιμών.



Συνιστούμε να διαβάσετε

Τα λειτουργικά συστήματα Windows που ξεκινούν με Vista χρησιμοποιούν ενσωματωμένο...