DOUG LLYOYD: Έτσι δεκαεξαδικούς αριθμούς, ως εάν χρειαζόμασταν έναν άλλο βασικό αριθμό
δεξιά καθεστώς;
Λοιπόν, οι περισσότερες δυτικές κουλτούρες, όπως ίσως είναι εξοικειωμένοι,
χρησιμοποιούν το δεκαδικό system-- βάσης 10, για να αντιπροσωπεύουν αριθμητικά δεδομένα.
Έχουμε τα ψηφία 0, 1, 2, 3, 5, 6, 7,8,9.
Και αν πρέπει να αντιπροσωπεύουν τιμές υψηλότερες από εννέα,
μπορούμε να συνδυάσουμε αυτά τα ψηφία χρησιμοποιώντας την έννοια της αξίας τόπο.
Έτσι, για 10, έχουμε ένα 1 ψηφίο ακολουθούμενο από ένα ψηφίο 0
και διαισθητικά καταλαβαίνουν ότι αυτό που κάνουμε
υπάρχει είμαστε πολλαπλασιασμό η πρώτη από 1 10,
και στη συνέχεια προσθέτοντας 0 για συνολικά 10.
Υπολογιστές κάνουμε κάτι όμορφο παρόμοια, όπως είστε πιθανώς εξοικειωμένοι,
με το δυαδικό system-- βάση 2.
Η διαφορά ύπαρξη ότι υπάρχουν μόνο 2 ψηφία
να εργαστούν with-- 0 και 1.
Και έτσι αξίες τόπου μας, αντί να είναι ένα,
δέκα, εκατό, χίλια, όπως θα ήταν προς το δεκαδικό σύστημα,
είναι ένα, δύο, τέσσερις, οκτώ, και ούτω καθεξής.
Εδώ είναι το πράγμα όμως, εκείνες 0 και 1, ειδικά
αν θέλουμε να είμαστε επιστήμονες πληροφορικής και κάνουμε ένα μεγάλο κομμάτι του προγραμματισμού
ή εργάζονται με ηλεκτρονικούς υπολογιστές, θα ήταν να δει πολλά από δυαδικούς αριθμούς.
Και αυτά τα 0 και 1 του σε μεγάλες αλυσίδες μπορεί να είναι πολύ δύσκολο να αναλύσει.
Δεν μπορούμε απλά να εξετάσουμε μια σειρά από 0 και 1 και γνωρίζει απαραίτητα
ακριβώς τι είναι.
Αλλά είναι ακόμα χρήσιμο να είναι σε θέση ρητή δεδομένα με τον ίδιο τρόπο
ότι ένας υπολογιστής κάνει.
Έχουμε αυτήν την έννοια της δεκαεξαδικό σύστημα, το οποίο είναι
βάση 16, αντί της βάσης 10 ή βάσης 2.
Πράγμα που σημαίνει ότι έχουμε 16 ψηφία να συνεργαστεί με αντί 10 ή 2.
Και αυτό είναι ένα πολύ πιο συνοπτικό τρόπο για να εκφράσουν
δυαδικές πληροφορίες για ένα σύστημα υπολογιστή, είναι πολύ πιο κατανοητή από τον άνθρωπο.
Έτσι έχουμε τα ψηφία 0 έως 9, και στη συνέχεια
έχουμε επίσης αυτά τα επιπλέον έξι digits-- ένα, b, c, d, e και f, που αντιπροσωπεύουν 10,
αντίληψή μας για 10, 11, 12, 13, 14 και 15, σε δεκαδική.
Μερικές φορές, από τον τρόπο, θα έχετε επίσης δείτε αυτά τα A έως F ως κεφάλαιο Α
μέσω F, η οποία είναι η τρόπος τείνω να το κάνω.
Είναι απλά προτίμησε μου στυλ, αλλά είτε είναι μια χαρά,
και οι δύο αντιπροσωπεύουν αρκετά πολύ το ίδιο πράγμα.
>> Τόσο γιατί είναι δεκαεξαδικό δροσερό;
Γιατί πρέπει να χρησιμοποιήσετε αυτό το άλλα πρόσθετα βάση;
Έχουμε ήδη 2 και 10, γιατί χρειαζόμαστε 16;
Καλά 16 είναι μία δύναμη του 2, και έτσι κάθε δεκαεξαδικό ψηφίο, 0 έως στ,
αντιστοιχεί σε ένα μοναδικό παραγγελία, ή μοναδική διάταξη
4 δυαδικών ψηφίων, 4 bits.
Και έτσι με αυτή την έννοια, μπορούμε να εκφράσουμε πολύ μεγάλο, πολύπλοκο, δυαδικοί αριθμοί
σε δεκαεξαδικό σε ένα πολύ πιο συνοπτικό τρόπο,
χωρίς απώλεια πληροφοριών ή να πρέπει να κάνει ιδιαίτερα περίπλοκη μετατροπές
σε αυτούς τους αριθμούς.
>> Έτσι, όπως μόλις είπα, κάθε δεκαεξαδικό ψηφίο
αντιστοιχεί σε ένα μοναδικό διευθέτηση των 4 δυαδικών ψηφίων.
Έτσι, η δυαδική συμβολοσειρά 0000 αντιστοιχεί σε δεκαεξαδικό ψηφίο 0.
0110 αντιστοιχεί σε δεκαεξαδικό ψηφίο 6.
Και 1111 αντιστοιχεί σε δεκαεξαδικό ψηφίο στ.
Αν ψάχνετε σε αυτό το διάγραμμα, ιδιαίτερα
αν ψάχνετε σε η αριστερή πλευρά του διαγράμματος,
μπορείτε ήδη να δείτε ότι υπάρχει μια κομμάτι μιας πρόβλημα της ασάφειας εδώ.
Δεκαδικό 0 είναι λίγο πολύ δυσδιάκριτες από δεκαεξαδικό 0,
εκτός από το γεγονός ότι είναι κάτω από μια στήλη που λέει δεκαεξαδικό.
>> Αλλά πιθανότατα δεν θα είναι πάντα έχουν υπάρξει αυτή στήλη.
Γενικά, όταν εκφράζουμε αριθμούς σε δεκαεξαδικό σύστημα
να γίνει σαφής διάκριση τους από δεκαδική μορφή,
Τους πρόθεμα συνήθως με το πρόθεμα 0x.
0x δεν σημαίνει τίποτα στην πραγματικότητα, είναι απλά μια ένδειξη για μας ως άνθρωποι
ότι αυτό που είμαστε για να δούμε, ή πρόκειται να ξεκινήσετε την ανάλυση,
είναι ένα δεκαεξαδικό αριθμό.
Προφανώς, για τα υψηλότερα ψηφία a, b, c, d, και f, τα οποία αντιστοιχούν σε 10-15
είναι αρκετά σαφείς ώστε να είναι αυτό είναι ένα δεκαεξαδικό αριθμό.
Και στην πραγματικότητα, κάθε δεκαεξαδικό αριθμός που έχει γράμματα σε αυτό,
είναι πιθανώς αρκετά προφανές ως δεκαεξαδικός αριθμός.
Αλλά, ακόμα, για το Χάριν σαφήνειας, είναι
πάντα μια καλή ιδέα να πρόθεμα κάθε φορά που
αναφέρεται σε ένα ψηφίο ως ένα δεκαεξαδικό αριθμό με πρόθεμα 0x ένα.
>> Έτσι, δυαδική, όπως είπε, έχει αξίες τόπο.
Υπάρχει ο τόπος αυτά, ένα μέρος δυάρια, μια θέση τέσσερα, και ένα μέρος οχτάρια.
Και έχει επίσης δεκαδικό μέρος αξίες, τις αυτά, δεκάδες, εκατοντάδες, χιλιάδες και
ότι όλοι μπορούν να ανακαλέσουν από το δημοτικό σχολείο.
Και δεν είναι δεκαεξαδικό εξαίρεση εδώ, πραγματικά.
Επίσης, έχει αξίες τόπο αλλά, αντίθετα, ότι είναι δυνάμεις του 2 ή τις εξουσίες των 10,
από όπου και αν εξουσίες του 16.
>> Έτσι βλέπουμε έναν αριθμό, όπως αυτή που αρκετά σαφώς γνωρίζουν ότι είναι 397, έτσι δεν είναι;
Λοιπόν, αν βλέπουμε έναν αριθμό, όπως αυτό, Ξέρουμε ότι αυτό δεν είναι 397 πια.
Αυτό είναι το δεκαεξαδικό αριθμός 3-9 επτά.
Δεν είναι 397, σημαίνει ότι κατι διαφορετικο,
επειδή είμαστε χρησιμοποιώντας τις εξουσίες του 16, όπως όλα των αξιών τόπου μας, αντί των εξουσιών
10.
Στην πραγματικότητα, οι τιμές εδώ θα πραγματοποιηθεί είναι ο τόπος αυτά, ο τόπος sixteens,
και τα δύο-100-50-εξάρια τόπο, τα οποία αντιστοιχούν στην ιδέα που έχουμε σε αυτά
θέση, δεκάδες τόπο, και ένα εκατοντάδες θέση, εάν ο αριθμός ήταν 397.
Αλλά δεδομένου ότι είναι 0x 397, έχουμε ένα μέρος αυτών, sixteens τόπο,
και δύο-100-50-εξάρια θέση.
Ή, ένα 16 στον τόπο 0, η οποία είναι 1.
Α 16 στην πρώτη θέση ισχύος, 16.
Ένα τετράγωνο μέρος 16, 256, και ούτω καθεξής, και ούτω καθεξής, και ούτω καθεξής.
Έτσι, ο αριθμός αυτός είναι πραγματικά 3 φορές 16 τετράγωνο, συν 9 φορές 16, συν 7.
Δεν έκανα τα μαθηματικά εδώ, αλλά δεν είναι 397, είναι πολύ, πολύ μεγαλύτερο από αυτό.
>> Ομοίως, θα μπορούσαμε να έχουμε 0x ADC, και αυτό είναι ένα τετράγωνο 16 φορές.
Ή αν το μεταφράσουμε σε αντίληψή μας των δεκαδικών αριθμών, που είναι 10 φορές
16 τετράγωνο, συν d φορές 16, ή 13 συν 16 φορές.
Και μην ανησυχείτε αν δεν έχετε απομνημονεύσει ότι d είναι 13, ή κάτι τέτοιο,
δεν υπάρχει πάρα πολλά αυτών των ψηφίων επιστολή
και αυτό θα γίνει διαισθητική πολύ γρήγορα.
Έτσι, και πάλι αυτό είναι 10 φορές 16 στο τετράγωνο, συν 13 φορές 16 συν 12 φορές 1.
Έτσι 0x ADC.
>> Έτσι, όπως είπα, κάθε ομάδα των 4 δυαδικών ψηφίων
αντιστοιχεί σε μια ενιαία δεκαεξαδικό ψηφίο,
και έτσι είναι πραγματικά πολύ εύκολο να αλλάξει και πίσω
μεταξύ hex και δυαδικό.
Αν έχετε αυτή τη μακρά σειρά των δυαδικά ψηφία, το μόνο που πρέπει να κάνετε
είναι να ξεκινήσετε την ομαδοποίησή τους δικαίωμα προς τα αριστερά όπως ομάδες 4.
Και τότε μπορείτε να εδραιώσει τους αριθμούς σε δεκαεξαδικό,
περιορίζοντας σημαντικά τον αριθμό των ψηφία θα πρέπει να επεξεργαστεί νοητικά.
Αντί 32 0 και 1, η όπως θα δούμε σε ένα δεύτερο,
να είστε σε θέση να το πιάσουμε σε μόλις 8 δεκαεξαδικά ψηφία, πολλά
πιο περιεκτική.
>> Τα διαγράμματα λίγες διαφάνειες πίσω μέρος θα να σας βοηθήσει να καταλάβω αυτή τη χαρτογράφηση,
αν και, πάλι εσείς θα απομνημονεύει αρκετά γρήγορα.
Θα πάμε μέσα από ένα παράδειγμα τώρα.
Έτσι, αν έχουμε έναν αριθμό, όπως αυτό, αυτό πραγματικά μεγάλο δυαδικό αριθμό,
ή ό, τι φαίνεται να είναι ένας μεγάλος δυαδικό αριθμό.
Και ο λόγος που το λέω αυτό, είναι ακριβώς so-- είναι ένα μεγαθήριο, σωστά;
Υπάρχουν τόσοι πολλοί 0 και 1 του εκεί.
Αλλά πιθανότατα δεν πραγματικά έχουν μια αίσθηση του τι
το μέγεθος αυτού του αριθμού είναι πραγματικά.
Δεν έχουμε καμία ιδέα για το τι θα αντιστοιχεί σε δεκαδικό.
Και στην πραγματικότητα δεν θα δούμε τι ακόμη αντιστοιχεί στο δεκαδικό τώρα.
Θα μπορούσε να είναι σε θέση να εκφράζουν αυτό με τρόπο ώστε
θα μας δώσει κάποιες περισσότερες πληροφορίες για το πόσο μεγάλος είναι αυτός ο αριθμός είναι.
>> Έτσι, ας πάμε σε αυτή τη διαδικασία μετατροπής.
Το πρώτο πράγμα που χρειαζόμαστε να κάνετε είναι να θέλουμε να ομαδοποιήσουμε τα
Αυτά τα ψηφία έξω σε ομάδες του 4, αρχίζοντας από τα δεξιά
και εργάζονται προς τα αριστερά.
Τυχαίνει να υπάρχει 32 ψηφία Εδώ, το οποίο σημαίνει ότι έχουμε
ένα ωραίο καθαρό σπάσιμο των 8 ομάδων του 4.
Να θυμάστε ότι κάθε ομάδα 4 εδώ, μοναδικά αντιστοιχεί
σε ένα δεκαεξαδικό ψηφίο.
Έτσι, θα αρχίσουμε και πάλι την οικοδόμηση μας αριθμός από τα δεξιά, αριστερά και λειτουργεί.
Λοιπόν τι είναι 1101;
Καλά θα κάνετε τα μαθηματικά στο κεφάλι μας, έχουμε 1 στη θέση οχτάρια, ένα 1
στη θέση τέσσερα, ένα μηδέν στα twos θέση, και ένα 1 στη θέση αυτών.
Αυτό είναι 8 συν 4 συν 1, το οποίο θα γνωρίζουμε ως 13.
Αλλά μάλλον δεν θα γράψω από 13, γιατί δουλεύουμε με δεκαεξαδικό.
Θα πρέπει να το μετατρέψετε σε δεκαεξαδικό ισοδύναμο του 13, η οποία είναι d.
>> 0011, και αυτό είναι ένα 0 στο πεδίο της οκτάρια χώρο, ένα 0 στην θέση τέσσερα,
ένα 1 στη θέση δυάδες, και 1 στη θέση αυτών.
Αυτό είναι 3.
Εννοώ συνεχίσω να το κάνω αυτό και πάλι, έχουμε εδώ 9.
Και στη συνέχεια 11, αλλά αυτό είναι β, ανάκληση.
2, 10-- ή a-- 6, και 4.
Και έτσι ώστε πολύ μεγάλη σειρά από 0 και 1, η κορυφή
είναι πιο συνοπτικά εκφράζεται σε δεκαεξαδικό ως 0x 46a2b93d.
>> Λοιπόν, εντάξει, έχουμε μάθει νέα δροσερό δεξιοτήτων, ποιο είναι το νόημα;
Εμείς δεν θα μπορούσε να χρησιμοποιήσει αυτό το σύνολο των χρόνο, όπως θα πάμε να δούμε σύντομα,
χρησιμοποιούμε αρκετά δεκαεξαδικό πολύ ως προγραμματιστές.
Όχι απαραίτητα για την Σκοπός της να κάνει τα μαθηματικά με αυτό,
αλλά επειδή πολλές φορές διευθύνσεις μνήμης στο σύστημά μας
εκπροσωπούνται σε δεκαεξαδικό.
Είναι ένα πραγματικά αποτελεσματικό τρόπο για να εκφράσουν Αλλιώς δυσκίνητη, δυαδικούς αριθμούς.
Και έτσι, πάλι, μπορεί να not-- είστε πιθανώς
δεν πρόκειται να κάνει καμία μαθηματικά με αυτό, δεν είστε
πρόκειται να είναι πολλαπλασιασμό δεκαεξαδικών αριθμών μαζί,
ή να κάνει κάτι περίεργο τέτοιο.
Αλλά είναι μια χρήσιμη δεξιότητα για να έχουν έτσι ώστε να μπορείτε έκφρασης και κατανόησης
μνήμη διευθύνσεις και άλλες τρόπους χρησιμοποιώντας δεδομένα σε C.
>> Είμαι ο Νταγκ Lloyd, αυτό είναι CS50.