DOUG LLYOYD: numeri esadecimali Così, come se avevamo bisogno di un altro numero di base
schema giusto?
Beh, la maggior parte delle culture occidentali, come probabilmente sei a conoscenza,
utilizzare la base system-- decimale 10, per rappresentare i dati numerici.
Abbiamo le cifre 0, 1, 2, 3, 5, 6, 7,8,9.
E se abbiamo bisogno di rappresentare valori superiori a nove,
possiamo combinare queste cifre utilizzando il concetto di valore posto.
Quindi per 10, abbiamo un 1 cifra seguita da una cifra 0
e comprendiamo intuitivamente che quello che stiamo facendo
c'è stiamo moltiplicando il primo 1 da 10,
e quindi aggiungendo 0 per un totale di 10.
I computer fanno qualcosa di molto simile, come probabilmente siete a conoscenza,
con la base system-- binario 2.
La differenza che ci sia che ci sono solo 2 cifre
lavorare with-- 0 e 1.
E così i nostri valori posto, invece di essere uno,
dieci, cento, mille, in quanto sarebbe nel sistema decimale,
sono uno, due, quattro, otto, e così via.
Ecco la cosa, però, quelle di 0 e 1, in particolare di
se vogliamo essere gli informatici e stiamo facendo un sacco di programmazione
o lavorare con i computer, erano in corso da vedere un sacco di numeri binari.
E quei 0 e 1 nella grandi catene può essere molto difficile da analizzare.
Non possiamo solo guardare una serie di 0 e 1 e necessariamente conoscere
esattamente quello che è.
Ma è ancora utile per essere in grado i dati espressi nello stesso modo
che un computer fa.
Abbiamo questa nozione di sistema esadecimale, che è
base 16, invece di base 10 o base 2.
Il che significa che abbiamo 16 cifre di lavorare con invece di 10 o 2.
Ed è molto più modo conciso per esprimere
informazioni binarie su un sistema di computer, è molto più umano comprensibile.
Così abbiamo le cifre Da 0 a 9, e poi
abbiamo anche questi in più sei un digits--, b, c, d, e ed f, che rappresentano 10,
nostra nozione di 10, 11, 12, 13, 14 e 15, in decimale.
A volte, tra l'altro, potrai anche vedere questi un bel passaggio di F come maiuscola
attraverso F, che è il modo tendo a farlo.
E 'solo il mio preferito stile, ma o è bene,
entrambi rappresentano piuttosto più o meno la stessa cosa.
>> Allora, perché è cool esadecimale?
Perché abbiamo bisogno di usare questo altra base supplementare?
Abbiamo già 2 e 10, perché abbiamo bisogno 16?
Ben 16 è una potenza di 2, e così ogni cifra esadecimale, da 0 a F,
corrisponde a un unico ordinazione, o accordo unico
di 4 cifre binarie, 4 bit.
E quindi in questo senso, possiamo esprimere molto lunghe, complesse, numeri binari
in esadecimale in un molto modo più conciso,
senza perdere informazioni o di dover fare conversioni particolarmente ingombranti
su quei numeri.
>> Quindi, come ho appena detto, ogni cifra esadecimale
corrisponde a un unico disposizione di 4 cifre binarie.
Così la stringa binaria 0000 corrisponde a esadecimale cifra 0.
0110 corrisponde a cifra esadecimale 6.
E 1111 corrisponde in esadecimale cifre f.
Se stai guardando questo grafico, in particolare
se si sta guardando la lato sinistro del grafico,
si può già vedere c'è una po 'di un problema di ambiguità qui.
Decimale 0 è praticamente indistinguibile da esadecimale 0,
a parte il fatto che è sotto una colonna che dice esadecimale.
>> Ma probabilmente non sarà sempre avere quella colonna lì.
Generalmente quando stiamo esprimendo numeri in notazione esadecimale
distinguere chiaramente loro di notazione decimale,
noi di solito li prefissa con il prefisso 0x.
0x non significa nulla in realtà, è solo un indizio per noi come esseri umani
che quello che stiamo per vedere, o per iniziare l'analisi,
è un numero esadecimale.
Ovviamente per le cifre superiori a, b, c, d, e, f, che corrispondono a 10-15
è abbastanza inequivocabile che è questo è un numero esadecimale.
Ed infatti, qualsiasi esadecimale numero che ha le lettere in esso,
è probabilmente abbastanza ovvio come numero esadecimale.
Ma, ancora, per la motivi di chiarezza, è
sempre una buona idea prefisso ogni volta che si
fare riferimento a una cifra come esadecimale numero anteponendo un 0x.
>> Quindi, binaria, come abbiamo Detto questo, ha valori posto.
C'è il luogo quelli, un posto due, un posto a quattro zampe, e un posto otto.
E decimale ha anche posto dei valori, i quelli, decine, centinaia, e migliaia
che tutti noi può ricordare dalla scuola elementare.
Ed esadecimale non è eccezione qui, davvero.
Ha anche posto dei valori, ma invece di essere potenze di 2 o potenze di 10,
sono potenze di 16.
>> Così vediamo un numero come questo noi sa abbastanza chiaramente che è 397, giusto?
Beh, se si vede un numero come questo, sappiamo che questo non è più 397.
Questo è l'esadecimale numero di tre 9-7.
Non è 397, significa qualcosa di diverso,
perché stiamo usando poteri di 16, come tutti dei nostri valori luogo invece di poteri
di 10.
Infatti, i valori posto qui sarebbe essere il posto quelle, il luogo sixteens,
e il luogo di duecento cinquanta sei, che corrispondono alla nostra idea di un quelli
luogo, decine luogo, e un centinaio posto, se il numero era 397.
Ma poiché è 0x 397, abbiamo un luogo, quelli sixteens posto,
e un luogo di duecento cinquanta sei.
Oppure, un 16 al 0 posto, che è 1.
A 16 al primo posto alimentazione, 16.
A 16 quadrati posto, 256, e così via, e così via, e così via.
Quindi questo numero è davvero 3 volte 16 quadrato, più 9 volte 16, più 7.
Non ho fatto la matematica qui, ma non è 397, è molto, molto più grande di quello.
>> Allo stesso modo, potremmo avere ADC 0x, bene che è un 16 volte al quadrato.
Oppure, se traduciamo che alla nostra nozione di numeri decimali, che è 10 volte
16 quadrati, più d volte 16 o più 13 volte 16.
E non preoccupatevi se non avete memorizzato che d è 13, o qualcosa di simile,
Non ci sono troppi di queste cifre lettera
e diventerà intuitiva abbastanza rapidamente.
Così ancora una volta questo è 10 volte 16 al quadrato, oltre 13 volte 16, oltre 12 volte 1.
ADC così 0x.
>> Quindi, come ho detto, ogni gruppo di 4 cifre binarie
corrisponde ad una singola cifra esadecimale,
e così in realtà è davvero facile cambiare avanti e indietro
tra esadecimale e binario.
Se si dispone di questa lunga serie di cifre binarie, tutto quello che dovete fare
è iniziare a raggruppare nel modo giusto a sinistra come gruppi di 4.
E poi è possibile consolidare li in numeri esadecimali,
limitando fortemente il numero di CIFRE è necessario elaborare mentalmente.
Invece di 32 0 e di 1, come vedremo in un secondo,
si potrebbe essere in grado di ottenere in giù a soli 8 cifre esadecimali, un sacco
più concisa.
>> I grafici alcune diapositive ritorno si vi aiuti a capire questa mappatura,
anche se, ancora una volta avrete memorizzarlo abbastanza rapidamente.
Andremo attraverso un esempio in questo momento.
Quindi, se abbiamo un numero come questo, davvero grande numero binario,
o quello che sembra essere un gran numero binario.
E la ragione per cui dico questo, è solo so-- è un colosso, giusto?
Ci sono così tanti di 0 e 1 di lì.
Ma probabilmente non lo facciamo davvero un senso di ciò che
la grandezza di questo numero è davvero.
Non abbiamo idea di cosa corrisponderebbe ad un decimale.
E infatti non ci nemmeno vedere che cosa corrisponde al decimale in questo momento.
Potremmo essere in grado di esprimere questo in un modo che
ci darebbe qualche informazione in più su quanto sia grande questo numero è.
>> Così andiamo a quel processo di conversione.
La prima cosa che dobbiamo di fare è che vogliamo gruppo
queste cifre in gruppi 4, partendo da destra
e lavorando a sinistra.
Ci capita di essere 32 cifre qui, il che significa che abbiamo
un bel taglio netto di 8 gruppi di 4.
Ricordate che ogni gruppo di 4 qui, unicamente corrisponde
ad una cifra esadecimale.
Quindi inizieremo di nuovo a costruire la nostra il numero da destra e sinistra working.
Beh, cosa c'è di 1101?
Beh, facciamo la matematica nella nostra testa, abbiamo 1 nel posto otto, un 1
collocati quattro, uno 0 nella twos posto, e un 1 al posto quelli.
Ecco 8 più 4 più 1, che noi sapremmo come 13.
Ma probabilmente non avremmo scrivere 13 fuori, perché stiamo lavorando con esadecimale.
Abbiamo bisogno di convertirlo in esadecimale equivalente di 13, che è d.
>> 0011, bene che è uno 0 nella posto otto, uno 0 nella fours posto,
un 1 nel luogo due, e un 1 al posto quelli.
Ecco 3.
Intendo continuare a fare questo ancora una volta, abbiamo qui 9.
E poi 11, ma questo è b, richiamo.
2, 10-- o a-- 6, e 4.
E perché molto grande corda di 0 e 1 di del top
è più conciso espresso in esadecimale come 0x 46a2b93d.
>> Bene, bene, abbiamo imparato un nuovo abilità fresco, qual è il punto?
Potremmo non utilizzare questo tutto il tempo, come andremo a vedere presto,
usiamo esadecimale abbastanza molto come i programmatori.
Non necessariamente per la scopo di fare matematica con esso,
ma perché molte volte indirizzi di memoria del nostro sistema
sono rappresentati in esadecimale.
E 'un modo davvero conciso per esprimere altrimenti ingombranti, numeri binari.
E così, ancora una volta, si può not-- probabilmente siete
non andare a fare qualsiasi matematica con essa, non si è
sta per essere moltiplicando numeri esadecimali insieme,
o fare qualcosa di strano in quel modo.
Ma è una capacità utile avere in modo da poter esprimere e capire
Memoria indirizzi e altre modi di utilizzo dei dati in C.
>> Sono Doug Lloyd, questo è CS50.