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.