..
Τι είναι η αριθμητική προώθηση; Αυτό είναι μια πολύ κοινή λειτουργία σε ένα πρόγραμμα και αντιστοιχεί σε έμμεση μετατροπή της τελεστές (για παράδειγμα, η addend) που συνδέονται με μια αριθμητική χειριστή (π.χ. "+" υποδηλώνει ότι η προσθήκη).
Αυτή η μετατροπή της είναι αναγκαία, όταν τα τελούμενα δεν ταιριάζουν ακριβώς το είδος των δεδομένων που αναμένεται για την επιχείρηση. Σε ορισμένες περιπτώσεις, η μετατροπή πρέπει να είναι σαφής (για παράδειγμα, χρησιμοποιώντας ένα χυτό ) και ως εκ τούτου η ευθύνη του προγραμματιστή.
Σε άλλες περιπτώσεις, ιδιαίτερα στην περίπτωση των πιο προηγμένων γλωσσών προγραμματισμού και διανέμεται (στο εξής θα αναφερόμαστε κυρίως με τη γλώσσα Java), η μετατροπή γίνεται αυτόματα, έτσι σιωπηρά. Σε αυτή την περίπτωση είναι δυνατόν να μιλάμε για αριθμητικό προώθησης.
Μπορούμε να διακρίνουμε δύο βασικές κατηγορίες αριθμητικών προώθησης: μοναδιαίες αριθμητικό προώθηση και δυαδικό αριθμητικό προώθηση, τα οποία διαφέρουν σημαντικά ως προς τη φύση του αριθμητικού εμπλέκονται στη λειτουργία (μοναδιαίες ή δυαδικές). Ας ρίξουμε μια ματιά και στα δύο σκέλη, φροντίζοντας να παρέχουν επίσης κάποια σύντομα παραδείγματα του κώδικα της Java.
Ας δούμε ένα παράδειγμα:
byte b = 2?
int a [] = new int [b]?
Χαρακτήρας c = '\ u0001'?
να [c] = 1?
a [0] = c?
Στην περίπτωση αυτή, αν και πολύ απλό, μπορούμε να προσδιορίσουμε τρία παραδείγματα μοναδιαίες αριθμητικό προώθησης. Το πρώτο είναι η εκπαίδευση int a [] = new int [b]. Το μέγεθος του «array γεγονός θα πρέπει να εκπροσωπείται από έναν ακέραιο (int μεταβλητή), ενώ b είναι μια μεταβλητή τύπου byte.
Στη συνέχεια, ας σκεφτούμε την εκπαίδευση [γ] =- 1. Σε αυτή την περίπτωση, έχει μεταφερθεί ως ένας δείκτης της «συστοιχίες, για άλλη μια φορά, όχι μια παράμετρος του τύπου integer, αλλά (στην προκειμένη περίπτωση) χαρακτήρας τύπου. Ομοίως, η επόμενη εντολή a [0] =- γ 0 δίνει τη θέση της «συστοιχίας σε μια τιμή τύπου int και όχι χαρακτήρα.
Παρατηρούμε πρώτον ότι σχετίζεται με τη μετατροπή σε «φορέα ανάθεσης ("="), επομένως μοναδιαίους φορέα, που σχετίζεται με ένα μόνο τελεστέο. Εδώ είναι γιατί μπορούμε να μιλάμε για μοναδιαίες αριθμητικό προώθησης. Πώς ο μεταγλωττιστής χειρίζεται τις μετατροπές που έμμεσα συνδέονται με τα βήματα;
Και στις τρεις περιπτώσεις, η μετατροπή μπορεί να αναλυθεί σε δύο στοιχειώδη βήματα. Πρώτη είναι ένα unboxing τύπο μετατροπής, δηλαδή τα στοιχεία (στην προκειμένη περίπτωση της Byte τύπου ή χαρακτήρων) μετατρέπεται στην αντίστοιχη πρωτόγονο τύπο δεδομένων (char byte, αντίστοιχα).
Σε αυτό το σημείο έχουμε προχωρήσει σε μια δεύτερη φάση της μετατροπής και στις τρεις περιπτώσεις που εξετάζονται είναι η διεύρυνση πρωτόγονη μετατροπής. Με λίγα λόγια, δεν υπάρχει απώλεια πληροφοριών και μάλιστα, το νέο τύπο δεδομένων που επιλέγετε (int) είναι υπεράφθονες ομάδες σε σύγκριση με την αποθήκευση πληροφοριών (που περιέχονται στη μεταβλητή β, ή γ της Byte τύπου, τύπου χαρακτήρων). Για το λόγο αυτό ο compiler μπορεί να εκτελέσει τον εαυτό σας με τη μετατροπή.
Την έμφαση ως το μόνο πραγματικό μετατροπές που μπορούν να εκτελεστούν σιωπηρά στο πλαίσιο των αριθμητικών προώθησης είναι αυτές που αναφέρονται. Υπάρχει στην πραγματικότητα, επίσης, τη δυνατότητα μετατροπής τύπου ταυτότητας, αλλά διατηρεί τον τύπο δεδομένων της μεταβλητής αυτής και ως εκ τούτου παρουσιάζουν ενδιαφέρον κυρίως θεωρητική.
| |
Linux (Μάθημα)
Πλήρης οδηγός για την open-source σύστημα. Από 49 €. |
| |
PHP (Μάθημα)
Η πλήρης σειρά μαθημάτων για τη δημιουργία δυναμικών ιστοσελίδων. Από 49 €. |
| |
Ruby και Ruby on Rails (Μάθημα)
Δημιουργία λογισμικού και Web εφαρμογές με Ρουμπίνι και RoR. Από 39 €. |