[Powered by Google Translate] ΙΟΡΔΑΝΙΑ JOZWIAK: Τύπος χύτευση, στην απλούστερη έννοια, είναι μια
τρόπος για να αλλάξει την ερμηνεία ενός υπολογιστή ορισμένων δεδομένων από
ρητά ή σιωπηρά την αλλαγή του τύπου δεδομένων.
Αυτή η αλλαγή ενός int σε float, ή το αντίστροφο.
Για να καταλάβουμε χύτευση τύπου, θα πρέπει να
ξεκινήσουμε με τα βασικά -
τύποι δεδομένων τους.
Σε γλώσσες προγραμματισμού όπως η C, όλες οι μεταβλητές έχουν κάποιο είδος
από τον τύπο δεδομένων που καθορίζει το πώς ο υπολογιστής, και επίσης
ο χρήστης, ερμηνεύει ότι η μεταβλητή.
Αριθμητική τύπους δεδομένων όπως int, long long, float και
δίκλινα, όλα έχουν το δικό μοναδικά χαρακτηριστικά τους και είναι
χρησιμοποιείται για να προσδιορίσει τις αξίες των διαφόρων περιοχών και την ακρίβεια.
Χύτευση Τύπος μας επιτρέπει να λάβουν έναν αριθμό κινητής υποδιαστολής, όπως
3,14 και να πάρει το μέρος πριν από την υποδιαστολή, 3 στην περίπτωση αυτή,
με χύτευση αυτή σε int.
Ας πάρουμε ένα παράδειγμα από την αγγλική γλώσσα για ένα σύντομο
επανεξέταση των τύπων, και να δούμε πώς τύπου χύτευσης μπορεί να αλλάξει
ο τρόπος που ερμηνεύουν ένα κομμάτι των δεδομένων.
Για τα δεδομένα, ας πάρουμε τα σύμβολα εδώ.
Απλά αναφέρεται σε αυτές τις προσεκτικά διαμορφωμένο γραμμές
σύμβολα, αλλά ως κάποιος που γνωρίζει την αγγλική γλώσσα,
μπορείτε αμέσως να αναγνωρίσουν ότι είναι, στην πραγματικότητα, τα γράμματα.
Καταλάβατε έμμεσα τον τύπο δεδομένων.
Κοιτάζοντας αυτή τη σειρά των γραμμάτων μπορούμε να δούμε δύο
διαφορετικά λόγια, το καθένα με τη δική του σημασία.
Υπάρχει το ουσιαστικό, τον άνεμο, όπως τα φυσάει.
Και υπάρχει το ρήμα, τον άνεμο, όπως θα πρέπει να
συνεχεία αναλογικό ρολόι μου.
Αυτό είναι ένα ενδιαφέρον παράδειγμα, επειδή μπορούμε να δούμε
πώς ο τύπος που έχουμε αναθέσει στα δεδομένα μας, αν ουσιαστικό ή
ρήμα, αλλάζει τον τρόπο που χρησιμοποιούμε τα δεδομένα -
σαν τον άνεμο λέξη ή άνεμος.
Παρά το γεγονός ότι ένας υπολογιστής δεν ενδιαφέρονται για τη γραμματική και τα μέρη
της αγγλικής ομιλίας, την ίδια βασική αρχή ισχύει.
Δηλαδή, μπορούμε να αλλάξουμε την ερμηνεία του ακριβούς
ίδια δεδομένα αποθηκεύονται στη μνήμη με χύτευση απλά σε ένα
διαφορετικού τύπου.
Εδώ είναι τα μεγέθη από τα πιο κοινά είδη σε ένα 32-bit
λειτουργικού συστήματος.
Έχουμε μια χαρα σε 1 byte, int και float σε 4 bytes, ένα μακρύ
μακρύ και ένα διπλό σε 8 bytes.
Επειδή ένας int καταλαμβάνει 4 bytes, θα διαρκέσει έως 32 bits
όταν αποθηκεύεται στη μνήμη σαν ένα δυαδικό σειρές
από μηδενικά και μονάδες.
Όσο η μεταβλητή μας παραμένει ως int τύπου, το
υπολογιστής θα μετατρέψει τα πάντα μονάδες και μηδενικά από
δυαδικό στο αρχικό αριθμό.
Ωστόσο, θα μπορούσαμε θεωρητικά ρίχνει τις 32
bits σε μία σειρά τύπων Boolean.
Και τότε ο υπολογιστής δεν θα είναι πλέον δούμε έναν αριθμό, αλλά
αντί για μια συλλογή από μηδενικά και μονάδες.
Θα μπορούσαμε επίσης να προσπαθήσει να διαβάσει τα δεδομένα ως ένα διαφορετικό αριθμητικό
πληκτρολογήσετε, ή ακόμα και ως μια σειρά από τέσσερις χαρακτήρες.
Όταν έχουμε να κάνουμε με αριθμούς σε χύτευση, θα πρέπει να εξετάσει πώς
η ακρίβεια της αξίας σας θα επηρεαστεί.
Λάβετε υπόψη σας ότι η ακρίβεια μπορεί να παραμείνει το ίδιο,
ή μπορείτε να χάσετε ακρίβεια, αλλά δεν μπορείτε ποτέ να αποκτήσουν ακρίβεια.
Ας πάμε κατευθείαν για τους τρεις πιο κοινούς τρόπους που μπορείτε να
χάνουν ακρίβεια.
Casting μια float σε int θα προκαλέσει περικοπή των πάντων
μετά την υποδιαστολή, έτσι είστε αριστερά
με τον ακέραιο αριθμό.
Αν πάρουμε το χ float που θα είναι ίσο με 3,7, μπορούμε να ρίχνει
αυτή η μεταβλητή x σε int γράφοντας απλά int σε
παρενθέσεις.
Κάθε φορά που χρησιμοποιούμε τον όρο αυτό ακριβώς εδώ, εμείς θα την αποτελεσματική
να χρησιμοποιεί την αξία τριών επειδή έχουμε περικοπεί
πάντα μετά την υποδιαστολή.
Μπορούμε επίσης να μετατρέψετε μια μακρά μακρά σε int, η οποία θα
ομοίως να οδηγήσει σε απώλεια των μπιτ υψηλής τάξης.
Μια πολύ μεγάλη καταλαμβάνει 8 byte, ή 64 bits στη μνήμη.
Έτσι, όταν το ρίχνει σε έναν int που έχει μόνο 4 bytes, ή 32
bits, είμαστε ουσιαστικά κοπή μακριά όλα τα bits που
αντιπροσωπεύουν τις υψηλότερες τιμές δυαδικό.
Θα μπορούσατε επίσης να ρίχνει ένα διπλό σε μια float, η οποία θα δώσει
σας το δυνατόν πιο κοντά float στο διπλό χωρίς
κατ 'ανάγκη στρογγυλοποίησης του.
Παρόμοια με πολύ μεγάλη μας να int μετατροπή, η απώλεια
ακρίβεια είναι επειδή ένα διπλό περιέχει περισσότερα δεδομένα.
Ένα διπλό θα σας επιτρέψει να αποθηκεύσετε σημαντικά bits 53,
περίπου 16 σημαντικά ψηφία.
Ότι ένα float θα σας επιτρέψει να αποθηκεύσετε 24
σημαντικά bits, περίπου επτά σημαντικά ψηφία.
Σε αυτές τις δύο τελευταίες περιπτώσεις, μπορεί να είναι χρήσιμο να σκεφτούμε
πληκτρολογήστε χύτευσης, αλλαγή μεγέθους μιας φωτογραφίας.
Όταν πηγαίνετε από ένα μεγάλο μέγεθος σε ένα μικρό μέγεθος, δεν μπορείτε να δείτε
πράγματα, όπως με σαφήνεια γιατί θα χάσει τα δεδομένα
με τη μορφή των pixels.
Τύπος χύτευσης μπορεί επίσης να προκαλέσει προβλήματα όταν
ρίχνει ints να επιπλέει.
Από επιπλέει σε μια 32-bit μηχάνημα έχει μόνο 24
σημαντικά bits, δεν μπορούν να αντιπροσωπεύουν με ακρίβεια τις τιμές
πάνω από 2 στη δύναμη του 24, ή 16777217.
Τώρα ας μιλήσουμε για ρητή και σιωπηρή χύτευσης.
Ρητή χύτευση είναι όταν γράφουμε τον τύπο σε παρενθέσεις
πριν από το όνομα μιας μεταβλητής.
Για παράδειγμα, πριν γράψαμε int σε παρένθεση πριν από μας
float μεταβλητή x.
Με αυτόν τον τρόπο, θα έχουμε την τιμή τύπου int, η
περικοπεί αξία του 3,7 -
3.
Σιωπηρή χύτευση είναι όταν ο compiler αλλάζει αυτόματα
παρόμοιους τύπους σε ένα σούπερ τύπου, ή εκτελεί κάποιο άλλο είδος
χύτευση χωρίς να απαιτείται από το χρήστη να γράψει
οποιοδήποτε πρόσθετο κωδικό.
Για παράδειγμα, όταν προσθέτουμε 5 και 1,1, οι αξίες μας έχουν ήδη
τύποι που συνδέονται με αυτά.
Το 5 είναι ένα int, ενώ 1.1 είναι ένα πλωτήρα.
Για να τα προσθέσετε, ο υπολογιστής ρίχνει 5 σε μια float,
το οποίο θα ήταν το ίδιο πράγμα όπως γράφει το 5,0 σε
πρώτη θέση.
Αλλά με αυτό τον τρόπο λέμε float 5, ή 5,0, συν ό, τι ήταν ήδη
float, 1,1, και από εκεί μπορούμε να προσθέσουμε στην πραγματικότητα αυτά τα
αξίες και να πάρει την αξία 6,1.
Σιωπηρή χύτευσης μας επιτρέπει επίσης να ορίσετε μεταβλητές
διαφορετικούς τύπους η μία στην άλλη.
Μπορούμε να εκχωρήσετε πάντα ένα λιγότερο ακριβές είδος σε μια πιο
ένα ακριβές.
Για παράδειγμα, αν έχουμε ένα διπλό x, y και ένα int -
και αυτά θα μπορούσαν να έχουν κανένα αξίες που τους ορίζεται σε -
μπορούμε να πούμε ισούται με x y.
Επειδή το διπλό έχει μεγαλύτερη ακρίβεια από ό, τι έναν int, έτσι ώστε να
δεν θα χάσετε καμία πληροφορία.
Από την άλλη πλευρά, δεν θα είναι αναγκαστικά σωστό να πούμε
γ ισούται χ, διότι το διπλό μπορεί να έχει μια μεγαλύτερη τιμή από ό, τι
ο ακέραιος.
Και έτσι ο ακέραιος μπορεί να μην είναι σε θέση να κρατήσει όλα τα
πληροφορίες που είναι αποθηκευμένες στο διπλό.
Σιωπηρή χύτευσης χρησιμοποιείται επίσης σε τελεστές σύγκρισης, όπως
μεγαλύτερο από, μικρότερο από, ή ο φορέας της ισότητας.
Με αυτό τον τρόπο μπορούμε να πούμε αν είναι 5,1 μεγαλύτερος από 5, και παίρνουμε το
αποτέλεσμα αλήθεια.
Επειδή 5 είναι ένα int, αλλά αυτό θα πρέπει να ρίχνει σε ένα άρμα, προκειμένου να
να συγκριθεί με τον πλωτήρα 5,1, θα έλεγα ότι είναι 5,1
μεγαλύτερη από 5,0.
Το ίδιο ισχύει και με το ρητό, αν ισούται με 2,0 ισούται με 2.
Θα θέλαμε επίσης να ισχύει, γιατί ο υπολογιστής θα ρίξει το
ακέραιο 2 να επιπλέουν και στη συνέχεια να πω ισούται με 2,0 ισούται με 2,0,
αυτό είναι αλήθεια.
Μην ξεχνάτε ότι μπορούμε επίσης να ρίχνει μεταξύ ints και χαρακτήρες,
ή τιμές ASCII.
Χαρακτήρες πρέπει επίσης να μειωθεί σε δυαδικό, η οποία είναι ο λόγος που
μπορεί εύκολα να μετατρέψει μεταξύ χαρακτήρες και τις αντίστοιχες
ASCII τιμές.
Για να μάθετε περισσότερα σχετικά με αυτό, δείτε το βίντεο μας σε ASCII.
Όταν παίρνετε μια στιγμή για να σκεφτεί για το πώς τα δεδομένα είναι αποθηκευμένα,
αρχίζει να κάνει πολύ νόημα.
Είναι ακριβώς σαν τη διαφορά μεταξύ του ανέμου και του ανέμου.
Τα δεδομένα είναι η ίδια, αλλά ο τύπος μπορεί να αλλάξει τον τρόπο μπορούμε
ερμηνεύουν.
Το όνομά μου είναι Jozwiak Ιορδανία, το CS50.