TypeCasting σε C: Σιωπηρή, ρητή με παράδειγμα

Πίνακας περιεχομένων:

Anonim

Τι είναι το Typecasting στο C;

Το Typecasting μετατρέπει έναν τύπο δεδομένων σε έναν άλλο. Ονομάζεται επίσης ως μετατροπή δεδομένων ή μετατροπή τύπου. Είναι μια από τις σημαντικές έννοιες που εισάγονται στον προγραμματισμό «C».

Ο προγραμματισμός «C» παρέχει δύο τύπους λειτουργιών χύτευσης τύπου:

  1. Σιωπηρή χύτευση τύπου
  2. Άμεση χύτευση τύπου

Σιωπηρή χύτευση τύπου

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

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

#includeint main(){short a=10; //initializing variable of short data typeint b; //declaring int variableb=a; //implicit type castingprintf("%d\n",a);printf("%d\n",b);} 

Παραγωγή

1010

  1. Στο δεδομένο παράδειγμα, έχουμε δηλώσει μια μεταβλητή σύντομου τύπου δεδομένων με τιμή αρχικοποιημένη ως 10.
  2. Στη δεύτερη γραμμή, έχουμε δηλώσει μια μεταβλητή ενός τύπου δεδομένων int.
  3. Στην τρίτη γραμμή, έχουμε αντιστοιχίσει την τιμή της μεταβλητής s στη μεταβλητή a. Στην τρίτη γραμμή η σιωπηρή μετατροπή τύπου εκτελείται καθώς η τιμή από τη μεταβλητή s που είναι σύντομου τύπου δεδομένων αντιγράφεται στη μεταβλητή a η οποία είναι τύπου int δεδομένων.

Μετατροπή χαρακτήρα σε Int

Εξετάστε το παράδειγμα της προσθήκης ενός χαρακτήρα που αποκωδικοποιείται στο ASCII με έναν ακέραιο:

#include main() {int number = 1;char character = 'k'; /*ASCII value is 107 */int sum;sum = number + character;printf("Value of sum : %d\n", sum );} 

Παραγωγή:

 Value of sum : 108

Εδώ, ο μεταγλωττιστής έχει κάνει μια ακέραια προώθηση μετατρέποντας την τιμή του «k» σε ASCII πριν εκτελέσει την πραγματική λειτουργία προσθήκης.

Ιεραρχία αριθμητικής μετατροπής

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

Εξετάστε το ακόλουθο παράδειγμα για να κατανοήσετε την έννοια:

#include main() {int num = 13;char c = 'k'; /* ASCII value is 107 */float sum;sum = num + c;printf("sum = %f\n", sum );} 

Παραγωγή:

 sum = 120.000000 

Πρώτα απ 'όλα, η μεταβλητή c μετατρέπεται σε ακέραιο, αλλά ο μεταγλωττιστής μετατρέπει τον αριθμό και το c σε "float" και τους προσθέτει για να παράγει ένα αποτέλεσμα "float".

Σημαντικά σημεία σχετικά με τις έμμεσες μετατροπές

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

Δεν μπορούμε να πραγματοποιήσουμε σιωπηρή μετάδοση τύπου σε τύπους δεδομένων που δεν είναι συμβατοί μεταξύ τους, όπως:

  1. Η μετατροπή float σε int θα περικόψει το τμήμα κλάσματος, χάνοντας έτσι το νόημα της τιμής.
  2. Η μετατροπή του διπλού σε float θα στρογγυλοποιεί τα ψηφία.
  3. Η μετατροπή μεγάλου int σε int θα προκαλέσει πτώση των υπερβολικών bit υψηλής τάξης.

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

Ο προγραμματισμός «C» παρέχει έναν άλλο τρόπο δακτυλογράφησης που είναι η ρητή μετάδοση τύπου.

Άμεση χύτευση τύπου

Στην έμμεση μετατροπή τύπου, ο τύπος δεδομένων μετατρέπεται αυτόματα. Υπάρχουν μερικά σενάρια στα οποία μπορεί να χρειαστεί να επιβάλουμε τη μετατροπή τύπου. Ας υποθέσουμε ότι έχουμε μια μεταβλητή div που αποθηκεύει τη διαίρεση δύο τελεστών που δηλώνονται ως int data type.

 int result, var1=10, var2=3;result=var1/var2;

Σε αυτήν την περίπτωση, μετά τη διαίρεση που εκτελείται στις μεταβλητές var1 και var2 το αποτέλεσμα που αποθηκεύεται στη μεταβλητή "αποτέλεσμα" θα είναι σε ακέραια μορφή. Όποτε συμβαίνει αυτό, η τιμή που αποθηκεύεται στη μεταβλητή "αποτέλεσμα" χάνει τη σημασία της, επειδή δεν λαμβάνει υπόψη το τμήμα κλάσματος που λαμβάνεται κανονικά στη διαίρεση δύο αριθμών.

Για να επιβάλουμε τη μετατροπή τύπου σε τέτοιες καταστάσεις, χρησιμοποιούμε ρητή μετάδοση τύπου.

Απαιτεί χειριστή τύπου casting. Η γενική σύνταξη για πράξεις χύτευσης τύπου έχει ως εξής:

(type-name) expression

Εδώ,

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

Ας γράψουμε ένα πρόγραμμα για να δείξουμε την εφαρμογή της ρητής χύτευσης τύπου στο "C".

#includeint main(){float a = 1.2;//int b = a; //Compiler will throw an error for thisint b = (int)a + 1;printf("Value of a is %f\n", a);printf("Value of b is %d\n",b);return 0;}

Παραγωγή:

Value of a is 1.200000Value of b is 2

  1. Έχουμε αρχικοποιήσει μια μεταβλητή «α» τύπου float.
  2. Στη συνέχεια, έχουμε μια άλλη μεταβλητή «b» ακέραιου τύπου δεδομένων. Δεδομένου ότι η μεταβλητή «a» και «b» είναι διαφορετικών τύπων δεδομένων, το «C» δεν θα επιτρέψει τη χρήση μιας τέτοιας έκφρασης και θα δημιουργήσει ένα σφάλμα. Σε ορισμένες εκδόσεις του «C», η έκφραση θα αξιολογηθεί αλλά το αποτέλεσμα δεν θα είναι επιθυμητό.
  3. Για να αποφύγουμε τέτοιες καταστάσεις, έχουμε πληκτρολογήσει τη μεταβλητή «a» τύπου float. Χρησιμοποιώντας ρητές μεθόδους μετάδοσης τύπου, έχουμε μετατρέψει επιτυχώς το float σε ακέραιο τύπο δεδομένων.
  4. Έχουμε τυπωμένη αξία του «a» που εξακολουθεί να είναι float
  5. Μετά την πληκτρολόγηση, το αποτέλεσμα θα είναι πάντα ακέραιος "b".

Με αυτόν τον τρόπο, μπορούμε να εφαρμόσουμε ρητή μετάδοση τύπου στον προγραμματισμό «C».

Περίληψη

  • Το Typecasting ονομάζεται επίσης μετατροπή τύπου
  • Σημαίνει τη μετατροπή ενός τύπου δεδομένων σε έναν άλλο.
  • Η μετατροπή μικρότερου τύπου δεδομένων σε μεγαλύτερο ονομάζεται επίσης προώθηση τύπου.
  • Το «C» παρέχει έναν σιωπηρό και ρητό τρόπο μετατροπής τύπου.
  • Η σιωπηρή μετατροπή τύπου λειτουργεί αυτόματα όταν βρεθεί ο συμβατός τύπος δεδομένων.
  • Η ρητή μετατροπή τύπου απαιτεί χειριστή τύπου casting.

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

  • Οι ακέραιοι τύποι πρέπει να μετατρέπονται σε πλωτήρα.
  • Οι τύποι πλωτήρα πρέπει να μετατραπούν σε διπλάσιο.
  • Οι τύποι χαρακτήρων πρέπει να μετατραπούν σε ακέραιο.