Τύποι char, short, int και long. Τύποι δεδομένων και μεταβλητές Αριθμητικοί τύποι δεδομένων σε γ

Αυτό το φύλλο εξαπάτησης παρέχει πληροφορίες σχετικά με τους κύριους τύπους δεδομένων της γλώσσας προγραμματισμού 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

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

Απάντηση:
  1. Ακέραιοι τύποι δεδομένων:

κοντό εντ, ανυπόγραφο κοντό έντ, ανυπόγραφο, ανυπόγραφο, μακρύ, ανυπόγραφο μακρύ.

  1. Τύποι δεδομένων κινητής υποδιαστολής (που αντιστοιχούν σε πραγματικούς τύπους):

float, double, long double.

  1. Τύπος δεδομένων χαρακτήρων:

char (υπογεγραμμένο char), ανυπόγραφο char, wchar_t.

  1. Τύπος δεδομένων Boole:

bool.

  1. Απαριθμημένος τύπος δεδομένων (παρουσιάστηκε στο Visual C++):

αρίθμηση.

2. Ποια είναι τα χαρακτηριστικά της χρήσης ακέραιων τύπων δεδομένων;

Στην C++, οι κύριοι τύποι δεδομένων ακεραίων είναι: short int, unsigned short int, int, unsigned int, long (long int), unsigned long (unsigned long int).

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

2 -100 398

Οι τύποι δεδομένων που ξεκινούν με το ανυπόγραφο πρόθεμα μπορούν να περιέχουν μόνο θετικούς αριθμούς.

Τα δεδομένα του τύπου short int, unsigned short int καταλαμβάνουν το μισό χώρο στη μνήμη από τα δεδομένα του τύπου int, unsigned int.

Τα δεδομένα τύπου long, unsigned long καταλαμβάνουν διπλάσιο χώρο στη μνήμη από τα δεδομένα τύπου int, unsigned int.

3. Πώς να περιγράψετε μια μεταβλητή με όνομα x ακέραιου τύπου σε ένα πρόγραμμα;

Απάντηση:
int x; // υπογεγραμμένος ακέραιος

Ως αποτέλεσμα, κάτω από τη μεταβλητή Χθα εκχωρηθεί χώρος μνήμης 4 byte. Το μέγεθος της μνήμης που εκχωρείται για μια μεταβλητή εξαρτάται από τα χαρακτηριστικά του υπολογιστή, τον τύπο του λειτουργικού συστήματος και τις ρυθμίσεις του μεταγλωττιστή.

4. Πώς να γράψετε τον αριθμό 239 σε μια μεταβλητή ακέραιου τύπου;

Για να το κάνετε αυτό, χρησιμοποιήστε τον τελεστή εκχώρησης, ο οποίος συμβολίζεται με το σύμβολο «=».

Απάντηση 1.Εισαγωγή αριθμού σε μια μεταβλητή μετά την περιγραφή της.

int x; x = 239;

Απάντηση 2.Εισαγωγή αριθμού σε μια μεταβλητή κατά την περιγραφή της (αρχική προετοιμασία).

int x = 239;

5. Ποια είναι τα χαρακτηριστικά των τύπων δεδομένων κινητής υποδιαστολής;

Οι τύποι δεδομένων κινητής υποδιαστολής σάς επιτρέπουν να αντιπροσωπεύετε τιμές από ένα σύνολο πραγματικών αριθμών. Για παράδειγμα:

8.35 -990.399 239.0.

Η C++ έχει τους ακόλουθους βασικούς τύπους δεδομένων κινητής υποδιαστολής: float, double, long double.

Μια μεταβλητή τύπου double καταλαμβάνει 2 φορές περισσότερο χώρο στη μνήμη του υπολογιστή από μια μεταβλητή τύπου float.

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

6. Πώς να περιγράψετε μια μεταβλητή που παίρνει τιμή κινητής υποδιαστολής;

Ένα παράδειγμα περιγραφής μεταβλητών των τύπων float, double, long double:

float f; διπλό d? μακρύ διπλό ld?

7. Πώς να γράψετε αριθμητικές τιμές σε μια μεταβλητή κινητής υποδιαστολής;

Ένα παράδειγμα εισαγωγής αριθμητικών δεδομένων σε μεταβλητές κινητής υποδιαστολής:

float f = -9928,45; // αρχική προετοιμασία διπλό d? μακρύ διπλό ld? d = 0,445332; // τελεστής εκχώρησης ld = 3892923898239.030903; // τελεστής εκχώρησης

8. Πώς να μετατρέψετε μια μεταβλητή float σε τύπο int;

Για να γίνει αυτό, χρησιμοποιείται η λειτουργία χύτευσης τύπου. Σε παρένθεση πρέπει να υποδείξετε το όνομα του τύπου στον οποίο μεταδίδεται το καστ.

επιπλέω α? int b; a = 8,457; b = (int ) a; // b = 8

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

Για παράδειγμα, μια μεταβλητή τύπου short int μπορεί να αντιπροσωπεύει μικρότερο εύρος αριθμών από μεταβλητές τύπου float ή double. Η ακόλουθη λίστα υπερχειλίζει μια τιμή σε μια μεταβλητή τύπου short int :

σύντομη int i? float f; f = 3990099,8; i = (int )f; // i = -7597 - υπερχείλιση

9. Πώς να μετατρέψετε μια μεταβλητή από type int σε type double;

Παράδειγμα casting από int σε double:

int i? διπλό d? i = 982; d = (διπλό)i; // d = 982,0

10. Ποια είναι τα χαρακτηριστικά της χρήσης δεδομένων χαρακτήρων (δεδομένων χαρακτήρων) σε ένα πρόγραμμα;

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

Για παράδειγμα, ο κωδικός για τον χαρακτήρα «f» είναι 102.

Ένα τμήμα κώδικα που υπολογίζει τον κωδικό χαρακτήρα:

κωδικός int? σύμβολο char? σύμβολο = "f" ; κωδικός = (int )symbol; // κωδικός = 102

Τα δεδομένα του τύπου char είναι οι ίδιοι ακέραιοι. Τα δεδομένα τύπου char καταλαμβάνουν 1 byte στη μνήμη του υπολογιστή.

Η σχέση χαρακτήρα προς κώδικα βρίσκεται στον πίνακα συμβόλων των Windows. Οι χαρακτήρες με κωδικούς από 0 έως 127 είναι δεσμευμένοι χαρακτήρες BIOS. Περιλαμβάνουν τα πιο συχνά χρησιμοποιούμενα σύμβολα, αριθμητικά σύμβολα και λατινικά σύμβολα. Αυτοί οι χαρακτήρες δεν μπορούν να αλλάξουν.

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

11. Ποια είναι τα χαρακτηριστικά της χρήσης τύπου δεδομένων bool (λογικός τύπος);

Οι μεταβλητές τύπου bool μπορούν να λάβουν μόνο δύο τιμές:

αληθινή αλήθεια,

ψευδής - ψευδής.

Αυτές οι μεταβλητές χρησιμοποιούνται για τον έλεγχο Boolean εκφράσεων. Η αριθμητική τιμή του true είναι 1. Η αριθμητική τιμή του false είναι 0.

Απόσπασμα κώδικα που ορίζει τις αριθμητικές τιμές true και false:

int αποτέλεσμα? bool b; αποτέλεσμα = (in)true; // αποτέλεσμα = 1 b = ψευδής ; αποτέλεσμα = (int )b; // αποτέλεσμα = 0

Απόσπασμα κώδικα που μετατρέπει τύπους int και float σε bool:

int i? float f; bool b; i = 6; b = (bool )i; // b = Σωστό f = 0,0; b = (bool )f; // b = Λάθος

12. Πώς να προσδιορίσετε το μέγεθος της μνήμης που καταλαμβάνει μια μεταβλητή ενός δεδομένου τύπου;

Η λειτουργία sizeof() χρησιμοποιείται για αυτό.

Ένα απόσπασμα κώδικα που καθορίζει το μέγεθος ορισμένων τύπων δεδομένων:

int d; d = sizeof(char); // d = 1 d = sizeof(unsigned int); // d = 4 d = sizeof(float); // d = 4 d = μέγεθος (διπλό); // d = 8

13. Πώς αρχικοποιούνται οι μεταβλητές διαφορετικών τύπων;

int d = 28; float z = (float )2,85; char c = "k" ; String ^s = "Γεια!" ; διπλό r = -8,559;

14. Πώς προσδιορίζεται η μέγιστη επιτρεπτή (ελάχιστη επιτρεπτή) τιμή μιας μεταβλητής συγκεκριμένου τύπου;

Για να προσδιορίσετε τη μέγιστη ή την ελάχιστη τιμή για μια μεταβλητή συγκεκριμένου τύπου, η βιβλιοθήκη .NET Framework χρησιμοποιεί τις ιδιότητες MaxValue και MinValue.

Παραδείγματα καθορισμού οριακών τιμών μεταβλητών διαφορετικών τύπων.

Για μεταβλητές τύπου int :

// πληκτρολογήστε int int i? μακρύ MaxInt; long MinInt; MaxInt = (long )i.MaxValue; // MaxInt = 2147483647 MinInt = (long )i.MinValue; // MinInt = -2147483648

Για μεταβλητές τύπου short int :

// πληκτρολογήστε short int σύντομη int si? int MaxInt; int MinInt; MaxInt = (int )si.MaxValue; // MaxInt = 32767 MinInt = (int )si.MinValue; // MinInt = -32768

Για μεταβλητές τύπου unsigned int :

// πληκτρολογήστε unsigned int ανυπόγραφο int ui? ανυπόγραφο int MaxInt; ανυπόγραφο int MinInt; MaxInt = ui.MaxValue; // MaxInt = 4294967295 MinInt = ui.MinValue; // MinInt = 0

Για float μεταβλητές:

// τύπος float float f; float MaxF? float MinF; MaxF = f.MaxValue; // MaxF = 3,402823E+38 MinF = f.MinValue; // MinF = -3,402823E+38

Για μεταβλητές τύπου double:

// πληκτρολογήστε διπλό διπλό d? διπλό MaxD? διπλό μυαλό? Max = d.MaxValue; // Μέγιστο = 1,79769313486232E+308 Ελάχιστη = d.MinValue; // Ελάχ. = -1,79769313486232E+308

Για μεταβλητές τύπου char:

// πληκτρολογήστε char char c; int MaxC; int MinC; Max = (int )c.MaxValue; // Μέγιστο = 127 Ελάχ. = (int )c.MinValue; // Ελάχ. = -128

15. Ποια είναι τα χαρακτηριστικά της χρήσης του τύπου enum;

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

Ένα παράδειγμα χρήσης του τύπου enum για την αναπαράσταση μηνών του έτους:

πολλούς μήνες (Ιανουάριος, Φεβρουάριος, Μάρτιος, Απρίλιος, Μάιος, Ιούνιος, Ιούλιος, Αυγούστου, Σεπτεμβρίου, Οκτωβρίου, Νοεμβρίου, Δεκεμβρίου) mn; mn = Ιανουάριος; // mn = 0 mn = Μάρτιος; // mn = 2 mn = Σεπτέμβριος; // mn = 8

Το παρακάτω παράδειγμα περιγράφει μια μεταβλητή με το όνομα mn τύπου enum μήνες. Οι μνημονικές τιμές για μήνες (Ιανουάριος, Φεβρουάριος, ...) ξεκινούν από 0 (0, 1, 2, ...). Η μνημονική του Ιανουαρίου είναι η ακέραια τιμή 0, η μνημονική του Φεβρουαρίου είναι η ακέραια τιμή 1 και ούτω καθεξής.

Έτσι, χρησιμοποιώντας τον τύπο enum, τα μνημονικά μπορούν να χρησιμοποιηθούν στο κείμενο του προγράμματος για καλύτερη σαφήνεια του πηγαίου κώδικα.

Μπορείτε επίσης να το γράψετε ως εξής:

mn = (αριθμοί μήνες)2; // mn = Μάρτιος mn = (αριθμοί μήνες)11; // mn = Δεκέμβριος

16. Ποια είναι τα χαρακτηριστικά του τύπουκενός σε προγράμματα γιαντο++ ?

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

  • εάν χρειάζεται να περιγράψετε μια συνάρτηση που δεν επιστρέφει καμία τιμή (βλ. παράδειγμα).
  • εάν χρειάζεται να περιγράψετε μια συνάρτηση που δεν λαμβάνει παραμέτρους (βλ. παράδειγμα).

Παράδειγμα. Η MyFun() είναι μια συνάρτηση χωρίς παραμέτρους που δεν επιστρέφει τιμή (επιστρέφει τον τύπο void ) και δεν λαμβάνει παραμέτρους.

δημόσιο : void MyFun(void ) { // σώμα λειτουργίας // ... ΕΠΙΣΤΡΟΦΗ; // επιστροφή από μια συνάρτηση που δεν επιστρέφει τιμή } // κλήση μιας συνάρτησης από το πρόγραμμα ... MyFun(); ...

17. Είναι δυνατή η δήλωση μεταβλητής τύπουκενός σε πρόγραμμα;

Αυτό δεν είναι δυνατό επειδή ο τύπος κενού δεν συσχετίζεται με μια τιμή.

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

"Παράνομη χρήση τύπου void"

18. Ποια είναι τα χαρακτηριστικά του τύπουwchar_ t VΟπτικός ντο++ ?

Μεταβλητές τύπου char (δείτε προηγούμενες παραγράφους) χρησιμοποιούνται για την αποθήκευση χαρακτήρων ASCII 8-bit.

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

Παράδειγμαχρησιμοποιώντας τον τύπο wchar_t.

... wchar_t t; // 2 byte μνήμης εκχωρούνται για τη μεταβλητή t t = "s"; ...

Ο χαρακτήρας ακέραιου τύπου καταλαμβάνει 1 byte (8 bit) στη μνήμη και σας επιτρέπει να εκφράσετε 2^8 τιμές = 256 σε δυαδικό. Ο τύπος char μπορεί να περιέχει τόσο θετικές όσο και αρνητικές τιμές. Το εύρος τιμών είναι από -128 έως 127.

uchar

Ο ακέραιος τύπος uchar καταλαμβάνει επίσης 1 byte στη μνήμη, όπως ο τύπος char, αλλά σε αντίθεση με αυτόν, το uchar προορίζεται μόνο για θετικές τιμές. Η ελάχιστη τιμή είναι μηδέν και η μέγιστη τιμή είναι 255. Το πρώτο u στο όνομα τύπου uchar είναι σύντομο για το unsigned.

μικρός

Ο ακέραιος τύπος σύντομου αριθμού έχει μέγεθος 2 byte (16 bit) και, κατά συνέπεια, σας επιτρέπει να εκφράσετε ένα σύνολο τιμών ίσο με 2 με την ισχύ του 16: 2^16 = 65.536. Επειδή ο σύντομος τύπος είναι υπογεγραμμένο και περιέχει τόσο θετικές όσο και αρνητικές τιμές, οι τιμές εύρους είναι μεταξύ -32.768 και 32.767.

σύντομος

Ο ανυπόγραφος σύντομος τύπος είναι ushort, ο οποίος έχει επίσης μέγεθος 2 byte. Η ελάχιστη τιμή είναι 0, η μέγιστη τιμή είναι 65.535.

ενθ

Ο ακέραιος τύπος int έχει μέγεθος 4 byte (32 bit). Η ελάχιστη τιμή είναι -2.147.483.648, η μέγιστη τιμή είναι 2.147.483.647.

uint

Ο ανυπόγραφος ακέραιος τύπος uint καταλαμβάνει 4 byte μνήμης και σας επιτρέπει να εκφράσετε ακέραιες τιμές από 0 έως 4.294.967.295.

μακρύς

Ο ακέραιος τύπος έχει μέγεθος 8 byte (64 bit). Η ελάχιστη τιμή είναι -9.223.372.036.854.775.808, η μέγιστη τιμή είναι 9.223.372.036.854.775.807.

μακρυά

Ο ακέραιος τύπος ulong καταλαμβάνει επίσης 8 byte και μπορεί να αποθηκεύσει τιμές από 0 έως 18.446.744.073.709.551.615.

Παραδείγματα:

char ch= 12 ;
κοντό sh=- 5000 ;
int in= 2445777 ;

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

Ο σωστός τρόπος θα ήταν:

Αποτέλεσμα:

Ch= -128 u_ch= 128
ch= -127 u_ch= 129
ch= -126 u_ch= 130
ch= -125 u_ch= 131
ch= -124 u_ch= 132
ch= -123 u_ch= 133
ch= -122 u_ch= 134
ch= -121 u_ch= 135
ch= -120 u_ch= 136
ch= -119 u_ch= 137
ch= -118 u_ch= 138
ch= -117 u_ch= 139
ch= -116 u_ch= 140
ch= -115 u_ch= 141
ch= -114 u_ch= 142
ch= -113 u_ch= 143
ch= -112 u_ch= 144
ch= -111 u_ch= 145
...

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

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

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

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

Ας ΡΙΞΟΥΜΕ μια ΜΑΤΙΑ τύπους αξίας.

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

Το C# ορίζει εννέα ακέραιους τύπους: char, byte, sbyte, short, ushort, int, uint, long και ulong. Αλλά ο τύπος χαρακτήρων χρησιμοποιείται κυρίως για την αναπαράσταση χαρακτήρων και επομένως αντιμετωπίζεται χωριστά. Οι υπόλοιποι οκτώ τύποι ακέραιων αριθμών προορίζονται για αριθμητικούς υπολογισμούς. Παρακάτω είναι το εύρος των αριθμών και το βάθος bit:

Τύποι ακέραιων αριθμών C#
Τύπος Τύπος CTS Μέγεθος bit Εύρος
ψηφιόλεξη Σύστημα.Byte 8 0:255
sbyte System.SByte 8 -128:127
μικρός System.Int16 16 -32768: 32767
σύντομος System.UIint16 16 0: 65535
ενθ System.Int32 32 -2147483648: 2147483647
uint System.UIint32 32 0: 4294967295
μακρύς System.Int64 64 -9223372036854775808: 9223372036854775807
μακρυά System.UIint64 64 0: 18446744073709551615

Όπως δείχνει ο παραπάνω πίνακας, η C# ορίζει τόσο τις υπογεγραμμένες όσο και τις ανυπόγραφες παραλλαγές των διαφόρων τύπων ακεραίων. Οι προσημασμένοι τύποι ακεραίων διαφέρουν από τους ανυπόγραφους ομολόγους τους στον τρόπο που ερμηνεύουν το πιο σημαντικό bit του ακέραιου. Έτσι, εάν ένα πρόγραμμα καθορίζει μια υπογεγραμμένη ακέραια τιμή, ο μεταγλωττιστής C# θα δημιουργήσει κώδικα που χρησιμοποιεί το πιο σημαντικό bit του ακέραιου ως σημαία πρόσημου. Ένας αριθμός θεωρείται θετικός εάν η σημαία του πρόσημου είναι 0 και αρνητικός εάν είναι 1.

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

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

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

Χρήση του συστήματος. χρησιμοποιώντας System.Collections.Generic; χρησιμοποιώντας System.Linq; χρησιμοποιώντας System.Text; namespace ConsoleApplication1 ( class Program ( static void Main(string args) ( long result; const long km = 149800000; // απόσταση σε km. αποτέλεσμα = km * 1000 * 100; Console.WriteLine(result); Console.ReadLine(); ) ))

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

Μήκος x = 0x12ab;

Εάν υπάρχει οποιαδήποτε αβεβαιότητα ως προς το εάν μια ακέραια τιμή είναι τύπου int, uint, long ή ulong, τότε Προκαθορισμένοτο int γίνεται αποδεκτό. Για να καθορίσετε ρητά τι άλλο ακέραιο τύπο θα πρέπει να έχει μια τιμή, οι ακόλουθοι χαρακτήρες μπορούν να προστεθούν σε έναν αριθμό:

Uint ui = 1234U; μήκος l = 1234L; ulong ul = 1234UL;

Το U και το L μπορούν επίσης να γραφτούν με πεζά, αν και ένα πεζό L μπορεί εύκολα να συγχέεται οπτικά με τον αριθμό 1 (ένα).

Τύποι Κυμαινόμενου Σημείου

Οι τύποι κινητής υποδιαστολής σάς επιτρέπουν να αναπαραστήσετε αριθμούς με κλασματικό μέρος. Υπάρχουν δύο τύποι τύπων δεδομένων κινητής υποδιαστολής στη C#: φλοτέρΚαι διπλό. Αντιπροσωπεύουν αριθμητικές τιμές με απλή και διπλή ακρίβεια, αντίστοιχα. Έτσι, το πλάτος του τύπου float είναι 32 bit, που αντιστοιχεί περίπου στο εύρος αναπαράστασης των αριθμών από 5E-45 έως 3,4E+38. Και το πλάτος του διπλού τύπου είναι 64 bit, που αντιστοιχεί περίπου στο εύρος αναπαράστασης των αριθμών από 5E-324 έως 1,7E+308.

Ο τύπος δεδομένων float προορίζεται για μικρότερες τιμές κινητής υποδιαστολής που απαιτούν λιγότερη ακρίβεια. Ο διπλός τύπος δεδομένων είναι μεγαλύτερος από τον float και προσφέρει υψηλότερο βαθμό ακρίβειας (15 bit).

Εάν μια μη ακέραια τιμή είναι κωδικοποιημένη στον πηγαίο κώδικα (για παράδειγμα, 12.3), τότε ο μεταγλωττιστής συνήθως υποθέτει ότι προορίζεται διπλή τιμή. Εάν η τιμή πρέπει να καθοριστεί ως float, θα χρειαστεί να προσθέσετε τον χαρακτήρα F (ή f) σε αυτήν:

Float f = 12,3F;

Δεκαδικός τύπος δεδομένων

Παρέχεται επίσης ένας δεκαδικός τύπος για την αναπαράσταση αριθμών κινητής υποδιαστολής υψηλής ακρίβειας. δεκαδικός, το οποίο προορίζεται για χρήση σε οικονομικούς υπολογισμούς. Αυτός ο τύπος έχει πλάτος 128 bit για να αντιπροσωπεύει αριθμητικές τιμές που κυμαίνονται από 1E-28 έως 7,9E+28. Πιθανώς γνωρίζετε ότι η κανονική αριθμητική κινητής υποδιαστολής είναι επιρρεπής σε σφάλματα στρογγυλοποίησης δεκαδικών. Αυτά τα σφάλματα εξαλείφονται χρησιμοποιώντας τον δεκαδικό τύπο, ο οποίος επιτρέπει στους αριθμούς να αναπαρίστανται με 28 (και μερικές φορές 29) δεκαδικά ψηφία. Επειδή αυτός ο τύπος δεδομένων μπορεί να αντιπροσωπεύει δεκαδικές τιμές χωρίς σφάλματα στρογγυλοποίησης, είναι ιδιαίτερα χρήσιμος για υπολογισμούς που σχετίζονται με οικονομικά:

Χρήση του συστήματος. χρησιμοποιώντας System.Collections.Generic; χρησιμοποιώντας System.Linq; χρησιμοποιώντας System.Text; namespace ConsoleApplication1 ( class Program ( static void Main(string args) ( // *** Υπολογισμός του κόστους μιας επένδυσης με *** // *** σταθερό ποσοστό απόδοσης*** δεκαδικό χρήμα, τοις εκατό, int i; Const byte έτη = 15, χρήματα = 1000,0 εκατ., τοις εκατό = 0,045 εκατ., για (i = 1, i

Το αποτέλεσμα αυτού του προγράμματος θα είναι:

Σύμβολα

Στην C#, οι χαρακτήρες δεν αντιπροσωπεύονται σε κώδικα 8 bit, όπως σε πολλές άλλες γλώσσες προγραμματισμού, όπως η C++, αλλά σε κώδικα 16 bit, που ονομάζεται Unicode. Το σύνολο χαρακτήρων του Unicode είναι τόσο ευρύ που καλύπτει χαρακτήρες από σχεδόν κάθε φυσική γλώσσα στον κόσμο. Ενώ πολλές φυσικές γλώσσες, συμπεριλαμβανομένων των αγγλικών, γαλλικών και γερμανικών, έχουν σχετικά μικρά αλφάβητα, ορισμένες άλλες γλώσσες, όπως τα κινέζικα, χρησιμοποιούν αρκετά μεγάλα σύνολα χαρακτήρων που δεν μπορούν να αναπαρασταθούν σε κώδικα 8 bit. Για να ξεπεραστεί αυτός ο περιορισμός, το C# ορίζει τύπου χαρ, το οποίο αντιπροσωπεύει ανυπόγραφες τιμές 16 bit που κυμαίνονται από 0 έως 65.535. Ωστόσο, το τυπικό σύνολο χαρακτήρων ASCII 8 bit είναι ένα υποσύνολο του Unicode που κυμαίνεται από 0 έως 127. Επομένως, οι χαρακτήρες ASCII εξακολουθούν να ισχύουν στη C#.

Τελευταία ενημέρωση: 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;

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



Εάν βρείτε κάποιο σφάλμα, επιλέξτε ένα κομμάτι κειμένου και πατήστε Ctrl+Enter.