Τύποι δεδομένων σε C - Ακέραιος, Κυμαινόμενο Σημείο και Άκυρο

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

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

Ένα παράξενο των τύπων δεδομένων του C είναι ότι εξαρτώνται εξ ολοκλήρου από το υλικό στο οποίο χρησιμοποιείτε τον κώδικά σας. Ένας intφορητός υπολογιστής θα είναι μικρότερος από έναν intυπερυπολογιστή, οπότε είναι σημαντικό να γνωρίζετε τους περιορισμούς του υλικού που εργάζεστε. Αυτός είναι και ο λόγος για τον οποίο οι τύποι δεδομένων ορίζονται ως intελάχιστοι - μια τιμή, όπως θα μάθετε, είναι τουλάχιστον -32767 έως 32767: σε ορισμένα μηχανήματα, θα είναι σε θέση να αποθηκεύει ακόμη περισσότερες τιμές από αυτό.

Υπάρχουν δύο κατηγορίες στις οποίες μπορούμε να το χωρίσουμε σε: ακέραιους αριθμούς και αριθμούς κινητής υποδιαστολής. Οι ακέραιοι είναι ακέραιοι αριθμοί. Μπορεί να είναι θετικά, αρνητικά ή μηδέν. Οι αριθμοί όπως -321, 497, 19345 και -976812 είναι όλοι απόλυτα έγκυροι ακέραιοι αριθμοί, αλλά το 4.5 δεν συμβαίνει επειδή το 4.5 δεν είναι ακέραιος αριθμός.

Οι αριθμοί κυμαινόμενου σημείου είναι αριθμοί με δεκαδικό. Όπως οι ακέραιοι, τα -321, 497, 19345 και -976812 είναι όλα έγκυρα, αλλά τώρα ισχύουν και οι 4.5, 0.0004, -324.984 και άλλοι μη ακέραιοι αριθμοί.

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

Ακέραιοι τύποι δεδομένων

Χαρακτήρες: char

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

Το πραγματικό μέγεθος, όπως όλοι οι άλλοι τύποι δεδομένων στο C, εξαρτάται από το υλικό στο οποίο εργάζεστε. Τουλάχιστον, είναι τουλάχιστον 8 bit, οπότε θα έχετε τουλάχιστον 0 έως 127. Εναλλακτικά, μπορείτε να χρησιμοποιήσετε signed charγια να λάβετε τουλάχιστον -128 έως 127.

Τυπικοί ακέραιοι: int

Το μέγεθος της μνήμης που χρειάζεται ένα intάτομο εξαρτάται από το υλικό. Ωστόσο, μπορείτε να περιμένετε ένα intμέγεθος τουλάχιστον 16 bit. Αυτό σημαίνει ότι μπορεί να αποθηκεύσει τιμές από -32.768 έως 32.767 ή περισσότερες ανάλογα με το υλικό.

Όπως όλοι οι άλλοι τύποι δεδομένων, υπάρχει μια unsignedπαραλλαγή που μπορεί να χρησιμοποιηθεί. Το unsigned intδοχείο μπορεί να είναι θετικό και μηδέν αλλά όχι αρνητικό, επομένως μπορεί να αποθηκεύσει τιμές από 0 έως 65.535 ή περισσότερες, ανάλογα με το υλικό.

Σύντομοι ακέραιοι αριθμοί: short

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

Μεγαλύτεροι ακέραιοι αριθμοί: long

Ο longτύπος δεδομένων αποθηκεύει ακέραιους αριθμούς int, αλλά δίνει ένα ευρύτερο φάσμα τιμών στο κόστος λήψης περισσότερης μνήμης. Τα μεγάλα αποθηκεύουν τουλάχιστον 32 bits, δίνοντάς τους εύρος από -2.147.483.648 έως 2.147.483.647. Εναλλακτικά, χρησιμοποιήστε unsigned longγια εύρος 0 έως 4.294.967.295.

Ακόμα μεγαλύτεροι ακέραιοι αριθμοί: long long

Ο long longτύπος δεδομένων είναι υπερβολικός για σχεδόν κάθε εφαρμογή, αλλά το C θα σας επιτρέψει να το χρησιμοποιήσετε ούτως ή άλλως. Είναι ικανό να αποθηκεύσει τουλάχιστον ,29.223.372.036.854.775.807 έως 9.223.372.036.854.775.807. Εναλλακτικά, αποκτήστε ακόμη περισσότερη υπερβολή unsigned long long, η οποία θα σας δώσει τουλάχιστον 0 έως 18.446.744.073.709.551.615.

Τύποι δεδομένων αριθμού κυμαινόμενου σημείου

Βασικοί αριθμοί κινητής υποδιαστολής: float

float διαρκεί τουλάχιστον 32 bit για αποθήκευση, αλλά μας δίνει 6 δεκαδικά ψηφία από 1.2E-38 έως 3.4E + 38.

Διπλά: double

doubleχρειάζεται διπλή μνήμη float (τουλάχιστον 64 bit). Σε αντάλλαγμα, το διπλό μπορεί να παρέχει 15 δεκαδικά ψηφία από 2.3E-308 έως 1.7E + 308.

Να αποκτήσετε ένα ευρύτερο φάσμα διπλών long double

long doubleπαίρνει τουλάχιστον 80 bit. Ως αποτέλεσμα, μπορούμε να πάρουμε 19 δεκαδικά ψηφία από 3.4E-4932 έως 1.1E + 4932.

Επιλογή του σωστού τύπου δεδομένων

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

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

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

#include  int main() { int a = 1; char b ='G'; double c = 3.14; printf("Hello World!\n"); //printing the variables defined above along with their sizes printf("Hello! I am a character. My value is %c and " "my size is %lu byte.\n", b,sizeof(char)); //can use sizeof(b) above as well printf("Hello! I am an integer. My value is %d and " "my size is %lu bytes.\n", a,sizeof(int)); //can use sizeof(a) above as well printf("Hello! I am a double floating point variable." " My value is %lf and my size is %lu bytes.\n",c,sizeof(double)); //can use sizeof(c) above as well printf("Bye! See you soon. :)\n"); return 0; }

Παραγωγή:

Hello World!Hello! I am a character. My value is G and my size is 1 byte. Hello! I am an integer. My value is 1 and my size is 4 bytes. Hello! I am a double floating point variable. My value is 3.140000 and my size is 8 bytes. Bye! See you soon. :)

Ο τύπος Void

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

1. Η λειτουργία επιστρέφει ως άκυρη

Υπάρχουν διάφορες συναρτήσεις στο C που δεν επιστρέφουν καμία τιμή ή μπορείτε να πείτε ότι επιστρέφουν άκυρες. Μια συνάρτηση χωρίς τιμή επιστροφής έχει τον τύπο επιστροφής ως άκυρο. Για παράδειγμα,void exit (int status);

2. Ορίσματα λειτουργιών ως άκυρα

Υπάρχουν διάφορες συναρτήσεις στο C που δεν δέχονται καμία παράμετρο. Μια συνάρτηση χωρίς παράμετρο μπορεί να δεχτεί ένα κενό. Για παράδειγμα,int rand(void);

3. Δείκτες προς άκυρο

Ένας δείκτης τύπου void * αντιπροσωπεύει τη διεύθυνση ενός αντικειμένου, αλλά όχι τον τύπο του. Για παράδειγμα, μια συνάρτηση εκχώρησης μνήμης void *malloc( size_t size);επιστρέφει ένα δείκτη σε κενό που μπορεί να μεταδοθεί σε οποιονδήποτε τύπο δεδομένων.