Τύποι δεδομένων C και μνήμη. Τύποι δεδομένων στη γλώσσα C

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

Chercher

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

  • Στατική πληκτρολόγηση - ο έλεγχος τύπου εκτελείται κατά τη μεταγλώττιση.
  • Δυναμική πληκτρολόγηση - ο έλεγχος τύπου πραγματοποιείται κατά το χρόνο εκτέλεσης.

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

Υπάρχουν απλοί, σύνθετοι και άλλοι τύποι δεδομένων.

Απλά δεδομένα

Τα απλά δεδομένα μπορούν να χωριστούν σε

  • ακέραιοι,
  • πραγματικός,
  • συμβολικός
  • σπαζοκεφαλιά.

Σύνθετα (σύνθετα) δεδομένα

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

Άλλοι τύποι δεδομένων

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

Ένα πρόγραμμα γραμμένο σε γλώσσα C λειτουργεί με δεδομένα διάφοροι τύποι. Όλα τα δεδομένα έχουν όνομα και τύπο. Η πρόσβαση στα δεδομένα του προγράμματος γίνεται με τα ονόματά τους (αναγνωριστικά).

Ένα αναγνωριστικό είναι μια ακολουθία που δεν περιέχει περισσότερους από 32 χαρακτήρες, η οποία μπορεί να περιλαμβάνει οποιαδήποτε γράμματα του λατινικού αλφαβήτου a - z, A - Z, τους αριθμούς 0 - 9 και την κάτω παύλα (_). Ο πρώτος χαρακτήρας του αναγνωριστικού δεν πρέπει να είναι αριθμός.

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

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

Ακέραια δεδομένα

Τα ακέραια δεδομένα μπορούν να αναπαρασταθούν σε υπογεγραμμένη ή ανυπόγραφη μορφή.

Ανυπόγραφοι Ακέραιοιαντιπροσωπεύονται ως μια ακολουθία bit στην περιοχή από 0 έως 2 n -1, όπου n είναι ο αριθμός των κατειλημμένων bit.

Υπογεγραμμένοι ακέραιοι αριθμοίαντιπροσωπεύονται στην περιοχή -2 n-1 …+2 n-1 -1. Σε αυτήν την περίπτωση, το πιο σημαντικό bit των δεδομένων εκχωρείται στο πρόσημο του αριθμού (0 αντιστοιχεί σε θετικό αριθμό, 1 σε αρνητικό).

Βασικοί τύποι και μεγέθη ακέραιων δεδομένων:

Πραγματικά δεδομένα

Πραγματικός τύποςπροορίζεται να αναπαραστήσει πραγματικούς αριθμούς. Οι πραγματικοί αριθμοί αναπαρίστανται στο πλέγμα bit του μηχανήματος σε τυποποιημένη μορφή.

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

12345.678 = 1.2345678 10 4

Ο αριθμός 0,009876 σε κανονικοποιημένη μορφή μπορεί να αναπαρασταθεί ως

0,009876 = 9,876·10 -3

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

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

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

  • σημάδι— bit που ορίζει το πρόσημο πραγματικός αριθμός(0 για θετικούς αριθμούς, 1 για αρνητικούς αριθμούς).
  • βαθμός— καθορίζει την ισχύ του 2 με την οποία θέλετε να πολλαπλασιάσετε έναν αριθμό σε κανονικοποιημένη μορφή. Δεδομένου ότι η ισχύς του 2 για έναν αριθμό σε κανονικοποιημένη μορφή μπορεί να είναι είτε θετική είτε αρνητική, η μηδενική ισχύς του 2 στην αναπαράσταση ενός πραγματικού αριθμού αντιστοιχεί σε μια τιμή μετατόπισης, η οποία ορίζεται ως

    όπου n είναι ο αριθμός των ψηφίων που εκχωρούνται για να αναπαραστήσουν την ισχύ ενός αριθμού.

  • ολόκληρος- ένα bit που είναι πάντα ίσο με 1 για κανονικοποιημένους αριθμούς, επομένως σε ορισμένες αναπαραστάσεις τύπου αυτό το bit παραλείπεται και θεωρείται ότι είναι ίσο με 1.
  • μάντισσα— σημαντικά ψηφία της αναπαράστασης ενός αριθμού, που βρίσκονται μετά το διαχωριστικό του ακέραιου και του κλασματικού μέρους σε τυποποιημένη μορφή.

Υπάρχουν τρεις κύριοι τύποι αναπαράστασης πραγματικών αριθμών στη γλώσσα C:

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

Παράδειγμα: Αντιπροσωπεύστε τον αριθμό -178.125 σε ένα πλέγμα 32 bit (τύπος float).

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

178 10 = 10110010 2 .

0,125 10 = 0,001 2 .

178.125 10 = 10110010.001 2 =1.0110010001 2 111

Για μετατροπή σε κανονικοποιημένη φόρμα, μετακινήστε 7 bit προς τα αριστερά).

Για να προσδιορίσετε τη δύναμη ενός αριθμού, χρησιμοποιήστε μια μετατόπιση:

0111111+00000111 = 10000110 .

Έτσι, ο αριθμός -178.125 θα αναπαρασταθεί στο πλέγμα bit ως

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

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

Τύπος Boolean

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

  • αλήθεια αλήθεια
  • ψευδής — — ψευδής

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

Παράδειγμα δήλωσης αντικειμένου

int n; // Μεταβλητή n ακέραιου τύπου
διπλό α? // Μεταβλητή a πραγματικού τύπου διπλής ακρίβειας


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

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

Στη γλώσσα MQL4 διακρίνονται οι ακόλουθοι τύποι (σταθερές, μεταβλητές και τιμές που επιστρέφονται ανά συναρτήσεις):

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

Πληκτρολογήστε τιμές ενθ- αυτοί είναι ακέραιοι αριθμοί. Αυτός ο τύπος περιλαμβάνει τιμές που έχουν αναπόσπαστο χαρακτήρα. Παραδείγματα ακέραιων αριθμών περιλαμβάνουν: τον αριθμό των ράβδων στο παράθυρο ενός χρηματοοικονομικού μέσου (16.000 bar), τον αριθμό των ανοιχτών και εκκρεμών εντολών (3 εντολές), την απόσταση σε πόντους από το τρέχον επιτόκιο ενός χρηματοοικονομικού μέσου έως την τιμή ανοίγματος εντολής (15 βαθμοί). Ο αριθμός των αντικειμένων όπως συμβάντα μπορεί επίσης να είναι μόνο ακέραιοι. Για παράδειγμα, ο αριθμός των προσπαθειών ανοίγματος μιας παραγγελίας δεν μπορεί να είναι μιάμιση, αλλά μόνο μία, δύο, τρεις κ.λπ.

Υπάρχουν 2 τύποι ακέραιων τιμών:

  • ΔεκαδικόςΟι τιμές μπορεί να αποτελούνται από αριθμούς 0 - 9 και μπορεί να είναι θετικές ή αρνητικές: 10, 11, 12, 1, 5, -379, 25, -12345, -1, 2.
  • ΔεκαεξαδικόΟι τιμές μπορούν να αποτελούνται από γράμματα του λατινικού αλφαβήτου από το A έως το F ή από το a έως το f, αριθμούς από το 0 έως το 9, πρέπει να ξεκινούν με 0x ή 0X και να είναι θετικά και αρνητικές τιμές: 0x1a7b, 0xff340, 0xAC3 0X2DF23, 0X13AAB, 0X1.

Αξίες πληκτρολογήστε intπρέπει να είναι στην περιοχή αριθμών από -2 147 483 648 έως 2 147 483 647. Εάν η τιμή μιας σταθεράς ή μιας μεταβλητής είναι εκτός του καθορισμένου εύρους, τότε το αποτέλεσμα του προγράμματος θα είναι απροσδιόριστο. Στη μνήμη του υπολογιστή, οι τιμές των σταθερών και των μεταβλητών τύπου int καταλαμβάνουν 4 byte.

Ένα παράδειγμα χρήσης μιας μεταβλητής int σε ένα πρόγραμμα:

int Art = 10 ; // Παράδειγμα ακέραιας μεταβλητής
int B_27 = - 1 ; // Παράδειγμα ακέραιας μεταβλητής
int Αριθμός = 21 ; // Παράδειγμα ακέραιας μεταβλητής
int Max = 2147483647 ; // Παράδειγμα ακέραιας μεταβλητής
int Min = - 2147483648 ; // Παράδειγμα ακέραιας μεταβλητής

Πληκτρολογήστε διπλό

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

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

Μερικές φορές, κατά τη σύνταξη προγραμμάτων, μπορεί να προκύψουν δυσκολίες στον προσδιορισμό του τύπου μιας μεταβλητής, δηλαδή, δεν είναι αμέσως σαφές στον προγραμματιστή τι είδους (int ή double) είναι η μεταβλητή. Ας δούμε ένα μικρό παράδειγμα:

Το πρόγραμμα άνοιξε 12 παραγγελίες μέσα σε μια εβδομάδα. Τι τύπος μεταβλητής Α πρέπει να είναι που λαμβάνει υπόψη τον μέσο αριθμό παραγγελιών που ανοίγονται από αυτό το πρόγραμμα ανά ημέρα; Προφανώς η απάντηση είναι: Α = 12 παραγγελίες / 5 ημέρες. Δηλαδή η μεταβλητή A = 2,4 να λαμβάνεται υπόψη στο πρόγραμμα ως διπλή, γιατί αυτή η τιμή έχει ένα κλασματικό μέρος. Και τι τύπος πρέπει να είναι αυτή η ίδια μεταβλητή A εάν ο συνολικός αριθμός παραγγελιών που ανοίγονται ανά εβδομάδα είναι 10; Φαίνεται ότι αν το 2 (10 παραγγελίες / 5 ημέρες = 2) δεν έχει κλασματικό μέρος, τότε η μεταβλητή Α μπορεί να ληφθεί υπόψη ως int. Ωστόσο, αυτό το σκεπτικό είναι εσφαλμένο. Η τρέχουσα τιμή κάποιας μεταβλητής μπορεί να έχει ένα κλασματικό μέρος που αποτελείται μόνο από μηδενικά. Αλλά το σημαντικό είναι ότι η τιμή αυτής της μεταβλητής είναι εγγενώς έγκυρη. Σε αυτήν την περίπτωση, η μεταβλητή Α πρέπει επίσης να είναι τύπου double και όταν γράφετε μια σταθερά στο πρόγραμμα, πρέπει να εμφανίζεται το σημείο διαίρεσης: A = 2,0


Οι τιμές των πραγματικών σταθερών και μεταβλητών αποτελούνται από ένα ακέραιο μέρος, ένα δεκαδικό σημείο (.) και ένα κλασματικό μέρος. Μπορούν να λάβουν θετικές και αρνητικές αξίες. Τα ακέραια και τα κλασματικά μέρη αποτελούνται από τους αριθμούς 0 - 9. Ποσότητα παραδειγματικές φυγούρεςμετά την υποδιαστολή μπορεί να φτάσει το 15. Για παράδειγμα:

27.12 -1.0 2.5001 -765456.0 198732.07 0.123456789012345

Το εύρος των διπλών τιμών είναι από -1,7 * e-308 έως 1,7 * e308. Στη μνήμη του υπολογιστή, οι τιμές των σταθερών και των μεταβλητών διπλού τύπου καταλαμβάνουν 8 byte.

Παράδειγμα χρήσης διπλής μεταβλητής σε πρόγραμμα:

διπλή Τέχνη = 10,123 ;
διπλό B_27 = - 1,0 ; // Παράδειγμα πραγματικής μεταβλητής
διπλός αριθμός = 0,5 ; // Παράδειγμα πραγματικής μεταβλητής
διπλό ΜΜΜ = - 12,07 ; // Παράδειγμα πραγματικής μεταβλητής
διπλή Τιμή_1 = 1,2756 ; // Παράδειγμα πραγματικής μεταβλητής

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

Πληκτρολογήστε τιμές bool- πρόκειται για τιμές λογικού τύπου, το περιεχόμενο των οποίων είναι ψευδές και αληθές.

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

Κατάλογος μαθητών Εγχειρίδιο φυσικής Εγχειρίδιο βιολογίας Το εγχειρίδιο χημείας
1 Ιβάνοφ V - -
2 Πετρόφ V - V
3 Σιντόροφ - V V
... ... ... ... ...
25 Μιρόνοφ V V V

Οι τιμές στις δεξιές στήλες θα λάβουν μόνο 2 πιθανές τιμές: true ή false. Αυτές οι τιμές δεν μπορούν να ταξινομηθούν ως τύποι δεδομένων που συζητήθηκαν προηγουμένως επειδή δεν είναι αριθμοί. Δεν είναι επίσης τιμές για το χρώμα, τη γεύση, την ποσότητα κ.λπ. Ωστόσο, φέρουν σημαντικό σημασιολογικό φορτίο. Στη γλώσσα MQL4, τέτοιες τιμές ονομάζονται λογικές. Ένα χαρακτηριστικό των σταθερών και των μεταβλητών τύπου bool είναι ότι μπορούν να λάβουν μόνο 2 πιθανές τιμές - true (true, True, TRUE, 1) ή false (false, False, FALSE, 0). Στη μνήμη του υπολογιστή, οι τιμές των σταθερών και των μεταβλητών τύπου bool καταλαμβάνουν 4 byte.

Ένα παράδειγμα χρήσης μιας μεταβλητής τύπου bool σε ένα πρόγραμμα:

bool aa = Αλήθεια ; // Η Boolean μεταβλητή aa έχει την τιμή true
bool B17 = TRUE ; // Η μεταβλητή Boolean B17 είναι αληθής
bool Hamma = 1 ; // Η Boolean μεταβλητή Hamma είναι αληθής

bool Asd = Λάθος ; // Η Boolean μεταβλητή Asd είναι ψευδής
bool Nol = FALSE ; // Η Boolean μεταβλητή Nol είναι ψευδής
bool Prim = 0 ; // Η Boolean μεταβλητή Prim είναι ψευδής

Πληκτρολογήστε συμβολοσειρά

Τιμή τύπου σειράείναι μια τιμή συμβολοσειράς που είναι ένα σύνολο χαρακτήρων ASCII.

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

Εάν πρέπει να εισαγάγετε ένα διπλό εισαγωγικό " σε μια συμβολοσειρά, τότε πρέπει να βάλετε έναν χαρακτήρα ανάστροφης κάθετο μπροστά από αυτό: \. Μπορούν να εισαχθούν τυχόν ειδικοί χαρακτήρες στη συμβολοσειρά σταθερές χαρακτήρων, πριν από έναν χαρακτήρα ανάστροφης κάθετο \. Το μήκος της σταθεράς συμβολοσειράς είναι από 0 έως 255 χαρακτήρες. Εάν το μήκος μιας σταθεράς συμβολοσειράς υπερβαίνει το μέγιστο, οι επιπλέον χαρακτήρες στα δεξιά απορρίπτονται και ο μεταγλωττιστής εκδίδει μια αντίστοιχη προειδοποίηση. Ο συνδυασμός δύο χαρακτήρων, ο πρώτος από τους οποίους είναι ανάστροφη κάθετο \, είναι συνήθως κοινός και ερμηνεύεται από τα περισσότερα προγράμματα ως ένδειξη εκτέλεσης ορισμένης μορφοποίησης κειμένου. Αυτός ο συνδυασμός δεν εμφανίζεται στο κείμενο. Για παράδειγμα, ο συνδυασμός \n υποδηλώνει την ανάγκη για αλλαγή γραμμής, \t υποδεικνύει μια καρτέλα κ.λπ.

Μια τιμή τύπου συμβολοσειράς γράφεται ως ένα σύνολο χαρακτήρων που περικλείονται σε διπλά εισαγωγικά: "MetaTrader 4", "Stop Loss", "Ssssstop_Loss", "stoploss", "10 pips". Η πραγματική τιμή συμβολοσειράς είναι το σύνολο των χαρακτήρων μέσα στα εισαγωγικά. Τα εισαγωγικά χρησιμοποιούνται μόνο για να υποδείξουν τα όρια μιας τιμής. Η εσωτερική αναπαράσταση είναι μια δομή 8 byte.

Ένα παράδειγμα χρήσης μιας μεταβλητής συμβολοσειράς σε ένα πρόγραμμα:

string Prefix = "MetaTrader 4";
string Postfix = "_of_my_progr. ΟΚ"; // Παράδειγμα μεταβλητής συμβολοσειράς
string Name_Mass = "Ιστορικό"; // Παράδειγμα μεταβλητής συμβολοσειράς
κείμενο συμβολοσειράς ="Κορυφαία γραμμή\ n Κατώτατη γραμμή"; // το κείμενο περιέχει νέες γραμμές

Τύπος χρώματος

Τιμή τύπου χρώμαείναι η τιμή του τύπου χρώματος.

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

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

  • Κυριολεκτικά

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

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

    Παραδείγματα: C"128,128,128" (γκρι), C"0x00,0x00,0xFF" (μπλε), C"0xFF,0x33,0x00" (κόκκινο).

  • Αναπαράσταση ακέραιου αριθμού

    Η ακέραια παράσταση γράφεται ως δεκαεξαδική ή δεκαδικός αριθμός. Δεκαεξαδικός αριθμόςέχει τη μορφή 0xRRGGBB, όπου RR είναι η τιμή έντασης του κόκκινου στοιχείου του χρώματος, GG είναι το πράσινο στοιχείο και BB είναι το μπλε στοιχείο. Οι δεκαδικές σταθερές δεν έχουν άμεση ανάκλαση στο RGB. Αντιπροσωπεύουν τη δεκαδική τιμή της αναπαράστασης δεκαεξαδικού ακέραιου αριθμού.

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

    Παραδείγματα: 0xFFFFFF (λευκό), 0x008000 (πράσινο), 16777215 (λευκό), 32768 (πράσινο).


    Ρύζι. 11. Β σύγχρονοι συντάκτεςμπορείτε να πάρετε παραμέτρους χρώματος για κυριολεκτικές και ακέραιες αναπαραστάσεις της τιμής χρώματος της σταθεράς.

  • Ονόματα χρωμάτων

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

    Μαύρος Σκούρο πράσινο DarkSlateGray Ελιά Πράσινος Βάσκας ΠΟΛΕΜΙΚΟ ΝΑΥΤΙΚΟ Μωβ
    Μαρόν Ινδικό Midnight Blue Σκούρο μπλε DarkOliveGreen Σέλα Μπράουν Πράσινο του δάσους OliveDrab
    Πράσινη θάλασσα DarkGoldenrod DarkSlateBlue Χώμα σιένης Μεσαίο μπλε καφέ Σκούρο Τιρκουάζ DimGray
    LightSeaGreen DarkViolet Πυρίμαχο τούβλο MediumVioletRed MediumSeaGreen Σοκολάτα βυσσινί SteelBlue
    Goldenrod MediumSpringGreen LawnGreen CadetBlue Σκοτεινή Ορχιδέα Κίτρινο πράσινο LimeGreen Πορτοκαλοκόκκινο
    Σκούρο Πορτοκαλί Πορτοκάλι Χρυσός Κίτρινος Κιτρινοπράσινος Ασβεστος SpringGreen Aqua
    DeepSkyBlue Μπλε Πορφύρα βαφή το κόκκινο Γκρί Γκρι Σχιστόλιθος Περού Μπλε βιολετί
    LightSlateGray Βαθύ ροζ Μεσαίο Τυρκουάζ Dodger Blue Τουρκουάζ Μπλε ρουά SlateBlue Σκούρο Χακί
    IndianRed MediumOrchid Πράσινο κίτρινο MediumAquamarine DarkSeaGreen Ντομάτα Ρόζι Μπράουν Ορχιδέα
    MediumPurple PaleVioletRed Κοράλλι CornflowerBlue Σκούρο γκρίζο SandyBrown MediumSlateBlue Βυρσοδέψω
    DarkSalmon BurlyWood Καυτό ροζ Σολομός Βιολέτα LightCoral SkyBlue LightSalmon
    Δαμάσκηνο Χακί Ανοιχτό πράσινο Ακουαμαρίνης Ασήμι LightSkyBlue Light SteelBlue Γαλάζιο
    Απαλό πράσινο Γαϊδουράγκαθο Μπλε σκόνη PaleGoldenrod PaleTurquoise Ανοιχτό γκρι Σιτάρι ΝαβάχοΛευκό
    Είδος φιδιού Ανοιχτό ροζ Gainsboro PeachPuff Ροζ Είδος πυκνής σούπας LightGoldenrod Αμύγδαλο ασπρισμένο
    LemonChiffon Μπεζ AntiqueWhite Παπάγια Μαστίγιο Μετάξι καλαμποκιού Ανοιχτό κίτρινο Ανοιχτόκυανό ΛΕΥΚΑ ΕΙΔΗ
    Λεβάντα MistyRose Old Lace Λευκός καπνός Κοχύλι Ελεφαντόδοντο Μελίτωμα Άλις Μπλου
    Λεβάντα Ρουζ MintCream Χιόνι άσπρο



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

χρώμα Paint_1 = C " 128 , 128 , 128 "; // Η μεταβλητή έχει την τιμή γκρι
χρώμα Colo = C " 0 x00 , 0 x00 , 0 xFF "; // Η μεταβλητή έχει την τιμή μπλε
χρώμα BMP_4 = C "0 xFF, 0 x33, 0 x00"

χρώμα K_12 = 0 xFF3300 ; // Η μεταβλητή έχει την τιμή κόκκινο
χρώμα N_3 = 0 x008000 ;
χρώμα Χρώμα = 16777215 ;
χρώμα Alfa = 32768 ; // Η μεταβλητή έχει την πράσινη τιμή

χρώμα Α = Κόκκινο ; // Η μεταβλητή έχει την τιμή κόκκινο
χρώμα Β = Κίτρινο ; // Η μεταβλητή έχει την τιμή κίτρινο
χρώμα Colorit = Μαύρο ; // Στη μεταβλητή εκχωρείται η τιμή μαύρο
χρώμα B_21 = Λευκό ; // Η μεταβλητή έχει την τιμή του λευκού

τύπος ημερομηνίας

Τιμή τύπου ημερομηνία ώραείναι η τιμή ημερομηνίας και ώρας.

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

Η σταθερά περιβάλλεται από μονά εισαγωγικά και ξεκινά με τον χαρακτήρα D. Επιτρέπεται μια περικομμένη τιμή: είτε χωρίς ημερομηνία, χωρίς ώρα, είτε κενή τιμή. Εύρος μεταβολών τιμών: από 1 Ιανουαρίου 1970 έως 31 Δεκεμβρίου 2037. Στη μνήμη του υπολογιστή, οι τιμές των σταθερών και των μεταβλητών τύπος ημερομηνίαςκαταλαμβάνουν 4 byte. Η τιμή αντιπροσωπεύει τον αριθμό των δευτερολέπτων που έχουν περάσει από τις 00:00 της 1ης Ιανουαρίου 1970.

Ένα παράδειγμα χρήσης μιας μεταβλητής τύπου ημερομηνίας σε ένα πρόγραμμα:

ημερομηνία ώρα Alfa = D "01.01.2004 00: 00"; // Νέος χρόνος
datetime Tim = D "01/01/2004"; // Νέος χρόνος
datetime Tims = D "2005.05.12 16:30:45";
ημερομηνία ώρα N_3 = D "05/12/2005 16:30:45"; // 12 Μαΐου 2005 16 ώρες 30 λεπτά 45 δευτερόλεπτα
datetime Compile = D ""; // ισοδύναμο με D"[compile date] 00:00:00"

Δήλωση και αρχικοποίηση μεταβλητών

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

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

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

Μια μεταβλητή μπορεί να δηλωθεί σε ξεχωριστή γραμμή:

int Var_1 ; // Δήλωση μεταβλητής σε ξεχωριστή γραμμή

Αυτή η καταχώρηση σημαίνει ότι θα χρησιμοποιηθεί η μεταβλητή Var_1 (η ίδια η δήλωση μεταβλητής) και ο τύπος αυτής της μεταβλητής είναι int.

Επιτρέπεται η δήλωση πολλών μεταβλητών του ίδιου τύπου σε μία γραμμή:

int Var_1, Box, Comm; // Δήλωση πολλαπλών μεταβλητών σε μία γραμμή

Αυτή η καταχώρηση σημαίνει ότι θα χρησιμοποιηθούν οι μεταβλητές Var_1, Box και Comm και ο τύπος αυτών των μεταβλητών είναι int, δηλαδή οι μεταβλητές που παρατίθενται θα ληφθούν υπόψη από το πρόγραμμα ως μεταβλητές ακέραιου τύπου.


Επιτρέπεται η προετοιμασία μεταβλητών σε δηλώσεις:

διπλό Var_5 = 3,7 ; // Εκκίνηση μιας μεταβλητής σε μια δήλωση ανάθεσης

Αυτή η καταχώρηση σημαίνει ότι η μεταβλητή Var_5 πραγματικού τύπου θα χρησιμοποιηθεί με αρχική τιμή 3,7.

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

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

Παραδείγματα δήλωσης και αρχικοποίησης μεταβλητών

Οι δηλώσεις μεταβλητών μπορούν να γίνουν σε πολλές γραμμές ή σε μία γραμμή.

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



Ρύζι. 12. Παραδείγματα δήλωσης μεταβλητών σε ξεχωριστή γραμμή.


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



Ρύζι. 13. Παραδείγματα δήλωσης μεταβλητών σε ξεχωριστή γραμμή.


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



Ρύζι. 14. Παραδείγματα αρχικοποίησης μεταβλητής.



Ρύζι. 15. Αρχικοποίηση μεταβλητής στην κεφαλίδα μιας σύνθετης πρότασης.

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

Οι τύποι δεδομένων είναι ιδιαίτερα σημαντικοί στη 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), τότε ο μεταγλωττιστής συνήθως υποθέτει ότι προορίζεται μια τιμή τύπου double. Εάν η τιμή πρέπει να καθοριστεί ως 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; Χρήματα = 1000,0 εκατ. = 0,045 εκατ.

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

Σύμβολα

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

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

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

Για έναν επεξεργαστή 16-bit, εκχωρούνται 2 byte για τιμές αυτού του τύπου,

για 32-bit - 4 byte.

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

Προσδιοριστής μακρύςσημαίνει ότι η ακέραια τιμή θα καταλάβει 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. Το μέγεθος αυτού του τύπου εξαρτάται από την υλοποίηση. κατά κανόνα αντιστοιχεί στον τύπο μικρός.Οι σταθερές συμβολοσειράς τύπου wchar_t γράφονται με το πρόθεμα L, για παράδειγμα, L“Gates”.

Boolean τύπος (bool)

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

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

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

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

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

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

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

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

Για παράδειγμα, η σταθερά 2E+6L θα είναι τύπου long double και η σταθερά 1,82f θα είναι τύπου float.

Όταν γράφετε προγράμματα που είναι καθολικά για διαφορετικές πλατφόρμες, δεν μπορείτε να κάνετε υποθέσεις σχετικά με το μέγεθος του τύπου ενθ.Για να το αποκτήσετε, πρέπει να χρησιμοποιήσετε τη λειτουργία sizeof, το αποτέλεσμα της οποίας είναι το μέγεθος του τύπου σε byte.

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

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

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

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

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

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

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

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

Δομή προγράμματος

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

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

  • Εάν η συνάρτηση δεν πρέπει να επιστρέψει μια τιμή, καθορίζεται ο τύπος κενού:
  • το σώμα της συνάρτησης είναι ένα μπλοκ και επομένως περικλείεται σε σγουρά σιδεράκια.
  • Οι λειτουργίες δεν μπορούν να ενσωματωθούν.
  • Κάθε πρόταση τελειώνει με ένα ερωτηματικό (εκτός από τη σύνθετη πρόταση).

Ένα παράδειγμα δομής προγράμματος που περιέχει τις συναρτήσεις main, fl και f2:

Το πρόγραμμα μπορεί να αποτελείται από πολλά ενότητες(αρχεία πηγής).

Σημειώσεις για I/O σε C++

Η γλώσσα C++ δεν έχει ενσωματωμένες δυνατότητες εισόδου/εξόδου - πραγματοποιείται χρησιμοποιώντας συναρτήσεις, τύπους και αντικείμενα που περιέχονται σε τυπικές βιβλιοθήκες.

Χρησιμοποιούνται δύο μέθοδοι: συναρτήσεις που κληρονομήθηκαν από τη γλώσσα C και αντικείμενα C++.

Βασικές λειτουργίες εισόδου/εξόδου σε στυλ C:

int scanf (const char* format, ...) // είσοδος
int printf(const char* format, ...) // έξοδος

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

Ένα παράδειγμα προγράμματος που χρησιμοποιεί συναρτήσεις εισόδου/εξόδου σε στυλ C:

#περιλαμβάνω
int main() (
int i?
printf("Εισαγάγετε έναν ακέραιο\n");
scanf("%d", &i);
printf("Εισαγάγατε τον αριθμό %d, ευχαριστώ!", i);
επιστροφή 0;
}

Η πρώτη γραμμή αυτού του προγράμματος είναι μια οδηγία προεπεξεργαστή, η οποία εισάγει ένα αρχείο κεφαλίδας στο κείμενο του προγράμματος που περιέχει μια περιγραφή των συναρτήσεων εισόδου/εξόδου που χρησιμοποιούνται στο πρόγραμμα (στο σε αυτήν την περίπτωσηοι αγκύλες είναι γλωσσικό στοιχείο). Όλες οι οδηγίες προεπεξεργαστή ξεκινούν με το σύμβολο #.

Η τρίτη γραμμή είναι μια περιγραφή μιας μεταβλητής ακέραιου τύπου που ονομάζεται i.

Η συνάρτηση printf στην τέταρτη γραμμή εκτυπώνει την προτροπή "Εισαγάγετε έναν ακέραιο" και μεταβαίνει σε μια νέα γραμμή σύμφωνα με την ακολουθία διαφυγής \n. Η συνάρτηση scanf αποθηκεύει τον ακέραιο αριθμό που έχει εισαχθεί από το πληκτρολόγιο στη μεταβλητή i (το σύμβολο & υποδηλώνει τη λειτουργία λήψης της διεύθυνσης) και η ακόλουθη δήλωση εμφανίζει τη συμβολοσειρά που καθορίζεται σε αυτήν, αντικαθιστώντας την προδιαγραφή μετατροπής με την τιμή αυτού του αριθμού.

Πρόγραμμα που χρησιμοποιεί βιβλιοθήκη κλάσης C++:

#περιλαμβάνω
int main() (
int i?
cout<< "Введите целое число\n"; cin >> i;
cout<< "Вы ввели число " << i << ", спасибо!";
επιστροφή 0;
}

Το αρχείο κεφαλίδας περιέχει μια περιγραφή ενός συνόλου κλάσεων για τη διαχείριση εισόδου/εξόδου. Ορίζει τυπικά αντικείμενα ροής cinγια είσοδο πληκτρολογίου και coutγια προβολή, καθώς και τη λειτουργία τοποθέτησης σε ρέμα< < и чтения из потока >>.

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



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

Μπλουζα