Perché imparare esadecimale? [chiuso]


28

Ho frequentato alcune lezioni di programmazione introduttiva durante la mia giornata, principalmente solo per bagnarmi i piedi in ogni diverso tipo di programmazione che trovo. Non sorprende che quasi tutte le classi passino attraverso lo stesso formato: introduzione all'hardware, introduzione al software e poi si entra nella programmazione effettiva. Mentre capire come funziona l'hardware e il software è molto importante, sono sempre stato confuso da un argomento che è stato in ogni singolo corso.

Nella sezione introduttiva al software ho trovato, senza dubbio, sempre una grande enfasi sull'essere letterati in sistemi numerici binari, esadecimali e talvolta persino ottali. Capisco che è bello capire cosa sono queste cose e come un computer le interpreterebbe, ma non mi sono mai trovato in realtà il bisogno di sapere come leggere e scrivere uno di quei sistemi numerici. Davvero, l'unica volta che ho visto qualcosa di diverso dalla base 10 è per i colori nei CSS, che è ancora più semplice se usi qualcosa come www.colorpicker.com

Ho appena ignorato gli usi meravigliosi di questi sistemi numerici non base-10 nel mondo della programmazione, o è solo una vecchia tradizione includere queste sezioni in tutti i libri di testo di programmazione? Qualcuno ha un buon esempio di dove il programmatore medio userebbe effettivamente un numero ottale?


1
Qualcuno ha un buon esempio di dove il programmatore medio userebbe effettivamente un numero ottale? Sì, se mai ti ritrovi a scrivere software correlato al settore dell'aviazione, probabilmente incontrerai i codici Transponder, che sono un numero ottale di 4 cifre. en.wikipedia.org/wiki/Transponder_%28aviation%29
Ben Cottrell

Risposte:


14

Tutte le risposte sono buone ma non affrontano ciò che ritengo sia la parte più preziosa. Imparare a "pensare" in basi diverse ti rende molto più fluente con il modo in cui i computer gestiscono i numeri.

Se volessi conservare una serie di lettere minuscole imballate abbastanza bene, come lo faresti?

Bene, ci sono 26 lettere minuscole, che si traducono facilmente in un intervallo compreso tra 0 e 31, che è un numero a 5 bit, è possibile racchiudere 6 numeri a 5 bit in un campo a 32 bit (int?) E avere ancora abbastanza per alcuni segni di punteggiatura.

Non sto dicendo che hex aiuta con cose come questa, ma capire come fa la conversione dei numeri.

Un altro caso, ogni tanto usi base-64 per passare numeri piuttosto lunghi in ascii. Sapresti come implementarlo? Perché implementarlo in questo modo? Ti sei mai reso conto che è quello che stavi digitando ogni volta che hai digitato "CD KEY" nella casella di registrazione di un gioco?

Inoltre, per divertirti, gioca con la base 12 per un po 'di tempo. La matematica risulta essere davvero interessante nella base 12 (la base 10 è stupida in confronto, vorrei che ci fossimo evoluti con 6 dita - potremmo essere decenni avanti nella nostra comprensione della matematica). Alcuni primi umani molto intelligenti hanno usato la base 12 per sviluppare l'orologio.

Nella base 10 abbiamo 3 numeri "Cool" che creano schemi semplici, 2, 5 e 9 con 8, 6 e 4 come numeri cool "Minori". Nella base 12 hai 2,3,4,6,11 come numeri "fantastici" con 8,9 e 10 come numeri freddi "minori", il che significa che se usassimo la base 12 saremmo molto più bravi a riconoscere gli schemi nei numeri perché li vedremmo sempre.

Inoltre, binario. Puoi contare da una mano a 32 - lo faccio abbastanza, a volte è utile quando contando fino a 5 non lo taglia :)

Il binario è molto divertente, ma non si traduce bene. Quando diventi bravo con hex, inizi a vedere "A" come 1010 e "5" come 0101, e queste cose iniziano a importare davvero. Se hai un bitfield che vuoi estrarre il sesto bit: 00100000, con cosa "e"? Dovresti solo sapere che è 0x20.

Se vedi del codice che fa qualcosa con 0x0600 quali bit vengono estratti? Dovresti saperlo senza nemmeno pensarci - dovresti effettivamente leggerlo come se fosse scritto 0000011000000000 (ma più facile da leggere perché non devi contare gli zeri).

Perché vorresti limitare il tuo cervello e la sua capacità di elaborare i dati?


In realtà, gli orologi sono stati sviluppati in base60 .
Denis de Bernardy,

@Denis Avevo l'impressione che la teoria attuale fosse che erano stati sviluppati da un popolo che contava nella base dodici che si perdeva con persone più stupide che non riuscivano a pensare di passarsi le dita. 60 sono solo le 12 divisioni ulteriormente suddivise in gruppi di 5 e sembra un dopo-hack dai grugniti della base 10 :)
Bill K,

Potrebbe essere. Ad essere sincero, non sono affatto uno specialista. Il tuo commento ha semplicemente riportato alla memoria un ricordo dimenticato da tempo. Ricordo anche che gli angoli misurati a 360 gradi provengono dalla base 60 (e dagli stessi inventori babilonesi, in quel caso), ma come fai notare, potrebbe essere che i grugniti della base 10 abbiano semplicemente sopraffatto ciò che originariamente erano matematici di base 12. :-) Ora, immagina se stessimo contando nella base-20, come facevano alcuni indiani americani. MrGreen
Denis de Bernardy il

44

Che cosa imparare? Devi essere in possesso di basi di numeri differenti per essere un programmatore competente, ma per quanto riguarda hex c'è poco da imparare, tranne che ABCDEF arriva dopo 9.


8
OP potrebbe riferirsi alla capacità di trasporre mentalmente alla base 10 da altre basi. Questa potrebbe essere stata un'abilità utile ad un certo punto, e potrebbe essere ancora per una certa categoria di programmatori di basso livello, ma oggi è in gran parte irrilevante. Puoi fare la conversione in vim in modo banale, per esempio.
Rein Henrichs,

È corretto. Avrei dovuto essere più chiaro.
jwegner,

2
@Rein Non sono mai stato molto bravo a farlo (devo fare i calcoli in testa), quindi non posso dirlo. Tuttavia, ero in grado di trasporre mentalmente dall'esagono al linguaggio assembly Z80, che era una cosa utile da fare in quel momento. Sospetto che la capacità di trasporre da un assemblatore hex a 80x86 (o qualsiasi altra cosa) sia ancora utile per i programmatori che lavorano oggi.
Neil Butterworth,

1
@Neil Butterworth: 8080 codici operativi hanno più senso visto in ottale, davvero, se la memoria serve. La mia memoria è davvero confusa su come ciò si applica alle estensioni Z80.
David Thornley,

1
@Neil: penso che la parte significativa siano state le istruzioni di spostamento da registro a registro, che sembrano essere 01xxxyyy in formato bit, dove xxx è la destinazione e la sorgente yyy. Non so se c'è qualche altro significato ottale.
David Thornley,

18

Qualcuno ha un buon esempio di dove il programmatore medio userebbe effettivamente un numero ottale?

Octal? Non generalmente, no, con un'eccezione per le autorizzazioni * nix.

Esadecimale? Scommetti. Stai ignorando il numero piuttosto elevato di noi che mescolano i bit attorno ai sistemi incorporati, osservando protocolli o formati di file a livello di bit, eccetera. Ma certo, se sei lontano dal metal facendo applicazioni o lavori sul web, potresti cavartela più facilmente.

Esempio: registri di configurazione su microcontrollori e simili.

Prendi il numero 54312, preso da tasti di punzonatura casuali. Puoi dire quali bit sono impostati? Non posso, almeno non dalla parte superiore della mia testa. L'equivalente esadecimale quindi, è 0xd428. Quellad'altra parte, mi dice subito che il modello di bit che sto guardando è 1101 0100 0010 1000. È più logicamente strutturato per quel genere di cose, e ti ritrovi a aver bisogno di questo tutto il tempo quando sei vicino al metallo. Diciamo che il numero sopra è quello che ottengo su reset dalla MCU e che ho bisogno di impostare i bit 7 e 9 per qualche motivo. In esadecimale, posso facilmente vedere che il numero risultante dovrebbe essere 0xd6a8, ma in decimale? È 54952, per nulla intuitivo se me lo chiedi. Certo, si tratta di aggiungere 640 al valore, ma è più difficile da capire. Naturalmente, in pratica, si potrebbe semplicemente spostare in bit la posizione corretta e OR quella con il valore originale, ma si potrebbe comunque voler sapere qual è la rappresentazione finale.


1
Quale tipo di domanda pone la domanda "perché dovrei preoccuparmi di quali bit sono impostati?" Per alcune (molte? Molte?) Applicazioni questo non è rilevante.
Neil Butterworth,

10
D'accordo - supponendo che stiamo parlando di uno sviluppo di alto livello. Basso livello, se un determinato bit viene impostato o cancellato non solo potrebbe, ma a volte determinerà se i micro-stivali insanguinati, o se una determinata periferica di cui hai bisogno riceve energia, o se funziona a una velocità di clock di x anziché y . Questo è solo l'inizio, e se hai a che fare con questo tipo di sviluppo, in sostanza, i bit singoli contano. A volte molto. Ma di nuovo, dipende dal tuo dominio, sto solo dicendo; Non dimenticare il mondo incorporato. =)
n42,

1
+1: più si avvicina alla macchina e più è necessario utilizzare basi diverse. Non è solo incorporato; la maggior parte delle lingue ha flag di bit e sono spesso scritte in esadecimale per ovvie ragioni. Al contrario, è abbastanza inutile insegnare in un primo corso di programmazione, ma poi la maggior parte dei primi corsi di programmazione sono abbastanza inutili. Quasi tutti i programmatori si insegnano bene?

1
@Davor: è perché hex è più facile da leggere. Riesco a capire un valore esadecimale di 8 cifre molto più veloce di un valore binario di 32 cifre.
Steve S,

2
@Steve S: Onestamente, sospetto sia perché siamo un gruppo pigro, anche .. 0x80 è più breve da scrivere di 0b10000000. Ma sono d'accordo. Concordo anche sul fatto che è ampiamente insignificante in un primo corso di programmazione, ma potresti spingerlo in matematica discreta, programmazione in tempo reale, organizzazione di computer e simili.
N42

12

Qualcuno ha un buon esempio di dove il programmatore medio userebbe effettivamente un numero ottale?

Se stai impostando le autorizzazioni su un file in Unix (o Linux), usi un numero ottale di 3 cifre. La prima cifra è l'autorizzazione dell'utente, la seconda è l'autorizzazione del gruppo e l'ultima cifra è l'autorizzazione di tutti gli altri.

Ho dovuto capire questo fatto nel codice che ho scritto la scorsa settimana.

Se osservi l'output di algoritmi di hashing standard come MD5, li troverai spesso scritti in esadecimale. Ho visto un numero di casi in cui questo portava all'aritmetica in basi insolite.

Se vuoi capire come il virgola mobile è rappresentato internamente, e quindi perché 1/10 non è rappresentato con precisione, devi assolutamente capire come fare l'aritmetica su basi diverse. Questa è conoscenza esoterica fino al giorno in cui ti colpisce nella parte posteriore e improvvisamente devi effettivamente capirlo in fretta.

E ci sono un sacco di altri casi in cui troverai la natura binaria fondamentale dei dati all'interno dei computer che spuntano. Ovviamente se stai solo scrivendo un sito web CRUD, probabilmente non ne incontrerai mai nessuno perché succede a livelli che qualcun altro ha già affrontato.


4
* I permessi nix non sono veri ottali. Non eseguire calcoli matematici con queste rappresentazioni. Nella migliore delle ipotesi sono rappresentazioni ottali di una maschera binaria.
Joel Etherton,

@Joel Etherton: quando si ottengono le autorizzazioni da una statistica del file, arrivano come numeri che per impostazione predefinita verranno visualizzati nella base 10. Se non si capisce la conversione in / dall'ottale, quei numeri sono difficili da capire. Stavo scrivendo la documentazione che doveva spiegare questo fatto. C'erano molti calcoli matematici.
btilly

@btilly: hai frainteso quello che sto dicendo. Se imposti le autorizzazioni su un file su 755 non dovrai aggiungerlo a nulla. È solo una maschera che descrive le combinazioni di autorizzazioni. Sicuramente devi riconoscere che significa (4 + 2 + 1) (4 + 0 + 1) (4 + 0 + 1), ma queste sono ancora solo rappresentazioni della maschera binaria. A cosa ti riferisci quando dici "file stat"? Non ho mai visto una statistica del file per le autorizzazioni fornite nella base 10 (attenendosi strettamente a questo esempio).
Joel Etherton,

1
@Joel Etherton: prova perl -le '@stat = stat(shift); print $stat[2]' some_filee otterrai una stat come numero nella base 10. Devi passarla in Perl's chmodallo stesso modo. Pertanto ha senso archiviare il numero in quel modo in un database, a quel punto devo documentare cosa hanno a che fare quei numeri con autorizzazioni Unix più familiari. Come ho detto, questo non era un esempio ipotetico.
btilly

@Joel Etherton: supponi di avere un file le cui autorizzazioni sono 419 (decimali), che vuoi rendere il file eseguibile dall'utente, ma non leggibile dal mondo. Come è necessario modificare il numero? Il valore restituito nella chiamata C stat () è un int, come si sceglie di stampare è, beh, un'altra questione.
Vatine,

9

Spero che, nel mondo reale, non sarai interrogato sulla conversione di Hex in binario in decimale. Avrai a tua disposizione strumenti per convertire qualsiasi modo desideri.

Sono d'accordo che dovresti avere una comprensione di ciò che sta succedendo, ma perché memorizzare quando puoi cercarlo?

Tuttavia, ho trovato utile ricordare i numeri chiave (per me 0x64 = 100, 0xFF = 255, 0xFFFF = 65535, ecc.) Perché escono molto.

Potrei scuotere quello che è 8675309 in binario, esadecimale e ottale? No, ma posso aprire uno strumento che è possibile quando è necessario.


3
Hai dimenticato 57005, comunemente usato come constelvis = 57005;
Bevan il

5

L'unica cosa per cui io abbia mai usato ottale sono i permessi dei file sui sistemi unix.

Hex e binary sono molto utili se si esegue qualsiasi operazione in prossimità dei protocolli wire o in prossimità del trasferimento di dati in metallo. Fondamentalmente i dati scorrono in binario, che viene banalmente rappresentato in un boccone alla volta come esadecimale.

Scoprirai anche che le schede tecniche spesso citano valori esadecimali, quindi è meglio mostrare il valore nel codice come appare nel foglio dati.

Se usi molto uno di questi, finisci per diventare abbastanza abile nella conversione da e verso i decimali nella tua testa, almeno per i valori comuni.

Detto questo; Sospetto che la forte enfasi sia per lo più storica. Come dici tu ci sono molti programmatori che hanno poco bisogno di qualcosa di diverso dal decimale.


5

In realtà stai chiedendo perché apprendere il potere di 2 rappresentazioni numeriche?

I computer sono fatti di circuiti , la corrente elettrica scorre attraverso i circuiti in due diversi livelli, alto e basso per rappresentare i due livelli di corrente, usiamo cifre binarie perché possono contenere due stati, uno (alto) o zero (basso).

Schemi di forma di cifre binarie . Ad esempio, se l'unico modo in cui io e te possiamo parlare è attraverso un circuito, possiamo stabilire che se vuoi inviarmi la lettera A, mi invierai il modello binario: 1000001. Dato che sono pigro , Non voglio memorizzare le 7 sette cifre. Piuttosto, userò una potenza di 2 sistemi di numerazione per rappresentare grandi cifre binarie in una più piccola. Posso usare 8 (2 ^ 3) o 16 (2 ^ 4).

Come puoi vedere la maggior parte dell'hardware e del software del computer usa una rappresentazione binaria e noi umani usiamo il potere di 2 rappresentazioni come ottale ed esadecimale per leggere la rappresentazione binaria in modo più efficiente e indolore.

Ora esempio del programmatore medio che ha bisogno di capire il potere di 2 rappresentazioni:

  1. ASCII
  2. Unicode
  3. Comprensione della programmazione della gestione della memoria (stack, heap, indirizzi di memoria, core dump)
  4. Debug
  5. La lettura dei dati binari viene eseguita principalmente nell'editor esadecimale.

Ora i miei ultimi due centesimi, sono molto fiducioso che puoi imparare abbastanza rapidamente qualsiasi potere di 2 rappresentazioni (dal momento che hai già gestito corsi di programmazione introduttiva). Potresti dimenticare la conversione, ma non dovrebbe essere un concetto estraneo se vuoi essere un programmatore medio.


3

Non ho mai usato ottale ma non è inusuale vedere hex nel debugger e, a volte, ha molto più senso usare hex nel tuo codice sorgente (normalmente, perché i dati sottostanti sono bit flags.)


3

Non so se ci sia molto bisogno in questi giorni, ma molti anni fa, quando ero un programmatore di sistemi, essere in grado di leggere e capire hex era essenziale. Mi verrebbe presentato un dump di archiviazione (tutto in esadecimale) e decodificato la rappresentazione esadecimale nel linguaggio IBM Assembly. Dopo averlo fatto per un po 'finirai per essere in grado di farlo direttamente - leggi l'esagono e scrivi l'equivalente dell'assemblaggio. Molto utile per il debug. L'aggiunta e la sottrazione di valori esadecimali è stata utile per calcolare gli offset dai registri di base.

Sospetto che in pratica non ce ne sia quasi bisogno, ma la sua conoscenza difficilmente può essere una cosa negativa.


È lì che ho acquisito anche le mie abilità esadecimali. Successivamente, migliorato quando sono stato costretto a eseguire il debug del codice senza un debugger simbolico su VAX / VMS (abbiamo inviato il codice ai clienti senza informazioni sui simboli). Al giorno d'oggi, lo uso raramente, sebbene codifichiamo alcune informazioni in determinati URL in esadecimale, e di tanto in tanto è utile poterle decodificare al volo.
TomG

3

Non si tratta di essere "fluenti" nella lettura binaria / esadecimale, ma abbastanza comodo da poter fare rapidamente una conversione mentale quando le incontri. Immagina di programmare senza essere a tuo agio con la semplice aritmetica e devi andare su una calcolatrice ogni volta che devi moltiplicare per due.

L'esadecimale / binario è importante perché questa è la lingua in cui parlano i computer. Lo incontrerai invariabilmente in alcuni punti, specialmente durante gli esercizi di debug e i tuoi dati sono in esadecimale.

Vorrei anche sottolineare l'importanza di comprendere la base-2 nel contesto di come i diversi tipi numerici sono rappresentati internamente e come funziona l'aritmetica. Con questo avrai una migliore comprensione di quando e come affrontare i problemi di arrotondamento in virgola mobile e overflow dei numeri interi, ad esempio.

Come ulteriore esempio, le operazioni bit a bit e i bit flag sono ancora prevalenti nella programmazione, e questo è un altro posto in cui è importante comprendere la base-2.


2

Davvero, l'unica volta che ho visto qualcosa di diverso dalla base 10 è per i colori nei CSS,

Non hai mai dovuto cercare un personaggio nelle tabelle dei codici Unicode ? Mai visto un URL che conteneva %20? Non hai mai usato un GUID ? Non hai mai visto un indirizzo IPv6 ? Mai scritto un BLOBletterale in SQL? Non hai mai visto un file in un editor esadecimale? Ci sono molte cose relative al computer che sono annotate in modo esadecimale in formato esadecimale.

Per quanto riguarda l'ottale, è raro al giorno d'oggi, ma ancora usato per le autorizzazioni del filesystem Unix.

Vedi anche: applicazioni pratiche di operazioni bit a bit

Anche se sei in grado di evitare di fare qualsiasi programmazione "vicino al filo", è comunque importante essere consapevoli del fatto che i computer operano in binario, per una semplice ragione: la perdita di astrazioni .

L' intastrazione nella maggior parte delle lingue perde la sua natura a larghezza fissa. I numeri interi traboccano e lo fanno con numeri binari "rotondi" come 2 31 . Un pensatore solo decimale non sarebbe in grado di spiegare il bug dell'Anno 2038 .

Il float/ doubleastrazione perde la sua radice di 2. Se si scrive 0.1, è davvero ottenere 0,1000000000000000055511151231257827021181583404541015625. E otterrai bug se ti aspettavi un esatto 0,1.


2

Riconoscere numeri particolari i cui schemi sono semplici in altre basi è spesso un indizio enorme quando si risolvono i bug. Se la tua risposta è sbagliata per 347, forse non significa nulla, ma se è disattivata per 256 o 128, forse significa qualcosa. Se si inserisce -1 in un tipo di dati a 16 bit senza segno, si ottiene 65535, ovvero 1 in meno di 65536. Se si conosce 2 ^ 16, si rileva immediatamente il problema.

Per quanto riguarda ottale, dai un'occhiata a queste domande e vedi se riconoscere ottale quando lo chiedi accidentalmente avrebbe reso qualcuno di questi programmatori migliori.


1

Esistono alcune tecniche matematiche e di compressione dei dati altamente efficaci che puoi usare quando comprendi questi sistemi e come funzionano. Probabilmente non li userete molto nei primi lavori. Ma averli nella tasca posteriore quando diventi un anziano e ti viene chiesto di rendere il sistema legacy sovraccarico di lavoro in esecuzione sul server di dinosauro sovraccarico sovraccarico è bello avere.
Diventa più importante quando hai a che fare con controller ed elettronica che non hanno un api. Soprattutto se stai scrivendo quell'api.


1

In introduzione ai corsi di programmazione che fanno parte dello studio in informatica, ha molto senso conoscere bene quel materiale. Rivedi l'argomento durante la programmazione in linguaggio assembly, durante la progettazione di hardware, un corso su linguaggi formali, ecc. Tutti gli ingegneri elettrici della mia università richiedono un corso di introduzione alla programmazione e probabilmente continueranno a utilizzare tali informazioni. A parte questo, non è terribilmente importante.


1

I numeri ottali sono occasionalmente utili quando si tratta di set di caratteri. Questi ultimi sono basati su byte e un ottale = 8 bit = un byte. In UTF-8, ad esempio, i caratteri non ASCII possono avere due o più byte; i numeri ottali sono più convenienti per rappresentarli rispetto ai numeri esadecimali.

I bit sono utili perché ... ehi! Sai che il tuo computer ha costantemente a che fare con 0 e 1, giusto? Intendo sul serio ... Non si tratta semplicemente di essere in grado di scherzare sul fatto che gli informatici sono i soli a sapere che 1 + 1 = 10. È utile anche per gli operatori bit-bit o come varbits. Questi ultimi consentono di ridurre i requisiti di archiviazione nei database quando si tratta di serie di flag.

Per quanto riguarda l'esadecimale, suppongo che tu non abbia mai aperto un editor esadecimale per migliorare le statistiche e l'equipaggiamento del tuo personaggio RPG. Se lo avessi fatto invece di scaricare un editor di personaggi, sapresti benissimo perché è conveniente essere in grado di dare un senso ai numeri esadecimali. ;-)


Penso che intendi "ottetto", non "ottale". Una cifra ottale è di tre bit. L'uso di costanti ottali per caratteri non ASCII è un fermo dai primi tempi di C, sviluppato su un PDP-11, che utilizzava la rappresentazione ottale nella maggior parte della documentazione (vedere questa scheda di riferimento PDP-11 ).
TMN,

Potrei essere. L'inglese non è la mia lingua madre. :-)
Denis de Bernardy,

1

Mi laureo all'università 3 anni fa e penso che sia molto importante poter leggere e scrivere numeri esadecimali. Ho un sacco di file XML di grandi dimensioni per lavoro (significato grande 100 MB +). A volte otterrai un file XML che si lamenta di un carattere XML non valido, che non è visualizzabile in nessun editor di testo, quindi ho dovuto usare l'editor esadecimale e scrivere il codice per individuare i caratteri non validi. Quel compito sarebbe molto difficile senza conoscere il numero esadecimale.


1

Molti anni fa ho imparato il valore di hex mentre lavoravo su sistemi a 8 bit.

La chiarezza nel capire che qualcosa si trovava in B000 o E7FF era sorprendente.

Ieri avevo bisogno di sapere esattamente quali fossero i caratteri alla fine di una riga di testo. Conoscere la differenza tra 0x0A e 0x0A 0x0D può essere davvero importante.


1

Qualcuno ha un buon esempio di dove il programmatore medio userebbe effettivamente un numero ottale?

L'ottale in questi giorni è piuttosto raro, ma io uso hex molto frequentemente e spesso penso a problemi in binario.

Programmo principalmente in C e C ++, con un po 'di Obiettivo C, e lavoro molto con la grafica raster e vettoriale su Linux e Mac OS X. In quelle arene, è fondamentale scrivere codice che funzioni in modo efficiente e faccia buon uso dell'archiviazione. Devi anche capire come le macchine rappresentano internamente ciò con cui stai lavorando. Il modo più conveniente per vederlo è in esadecimale. Ad esempio, un pixel di colore standard a 24 bit è rappresentato in tre byte e sapere a colpo d'occhio che 0x000000 è nero, 0x00FF00 è rosso e 0x008000 è rosa è davvero molto utile!

Lavoro anche molto con gli standard internazionali per i formati di file. Uno con cui ho lavorato di recente è MXF, che viene utilizzato per l'archiviazione di video per trasmissioni, DVD, ecc. È un formato binario e, ancora una volta, è più facilmente gestibile utilizzando esadecimali o talvolta binari. Quando esegui il debug del motivo per cui alcuni video basati su MXF non vengono riprodotti direttamente sul tuo sistema, è davvero utile poter dare un'occhiata a un campo a 32 bit e rendersi conto che il bit per svuotare lo schermo è impostato inavvertitamente - e puoi farlo quello in esadecimale, ma è praticamente impossibile nella base 10.

Se hai intenzione di passare la tua carriera scrivendo Perl per massaggiare stringhe di testo, allora no, probabilmente non avrai bisogno di avere molta familiarità con hex, ottale o binario. Ma nel momento in cui inizi a gestire i tipi di cose che faccio, hex e binary almeno sono essenziali.


0

Dovresti conoscere esadecimale se vuoi essere un programmatore. Sarebbe troppo imbarazzante per te dover ammettere al lavoro il raro giorno in cui devi sapere che non lo capisci.

Non significa che devi essere in grado di aggiungere numeri esadecimali nella tua testa. In ogni caso, inizia a rovinare le regole per un'aggiunta regolare. :)


0

Ciò che binario, esadecimale e ottale hanno in comune non è che non sono base10, ma che sono tutti poteri di due. Poiché i computer sono intrinsecamente binari, ciò fornisce a ciascuno di essi un'applicazione in cui rappresenta il modo più appropriato o efficiente per visualizzare e gestire i dati.

Questo era molto importante, quando tutta la programmazione era di basso livello. Nella programmazione di alto livello che oggi, i sistemi numerici power-of-2 sono molto meno importanti. Avere una completa introduzione ad essi in ogni corso di programmazione potrebbe essere una reliquia dei vecchi tempi.

Ma questi sistemi di numeri hanno ancora i loro usi, anche quando lavori in lingue di alto livello. Il colore, ad esempio, è ancora memorizzato in 24 bit, 8 bit per colore primario. E poiché l'esadecimale è il modo migliore per rappresentare un byte in modo leggibile dall'uomo, fa anche parte del CSS, che dovrebbe essere utilizzabile da persone che non hanno mai avuto un'introduzione alla programmazione.

Non puoi capire i computer senza capire il binario. Un'introduzione al binario è una parte necessaria di ogni approfondita introduzione alla programmazione. Potrebbe non essere necessario eseguire molte conversioni tra i sistemi numerici nel lavoro quotidiano, ma fare esercizi del genere è l'unico modo per acquisire familiarità con questi sistemi numerici *. Conoscere più di un sistema a 10 numeri non base è l'unico modo per comprendere correttamente, che i dati possono essere rappresentati in molti modi, tutti validi.

  • Come diceva John von Neumann: "[..] non capiamo le cose, ci abituiamo".

0

Penso che la conversione in quanto tale da una base all'altra non sia molto importante per la programmazione. Nella programmazione di alto livello non hai bisogno delle conversioni (e potresti mai farlo, le funzioni lib e la calcolatrice sono disponibili.) Quando ti immergi nella programmazione di livello inferiore, non sei più in un corso introduttivo.

Penso che due questioni (correlate) siano importanti da affrontare in un corso di base.

  1. Informazioni sulla codifica. Non si tratta di conversione matematica ma dell'utilizzo di numeri (qualsiasi tipo di numero) per memorizzare informazioni (qualsiasi tipo di informazione). Potresti illustrarlo con un codice Morse o dipingere anche dai numeri, se lo desideri. Ma poiché i computer usano piuttosto binario e il binario di solito viene visualizzato come esadecimale, le cose di solito sono illustrate con esempi hexy. (E mentre ci sono, potrebbero spiegare un po 'le terminazioni di linea, che sono state menzionate in questo argomento. Consiglio solo di riconoscere le varie forme e forme che questo potrebbe assumere, alcune di queste sono 0x0D, 0x0A , CRLF, '\ n' e '\ r')

  2. Problemi di overflow. Ancora una volta, non è necessario illustrarlo con esadecimale. Potresti usare l'esempio y2k (che non aveva nulla a che fare con esadecimale) Qui anche io consiglierei di riconoscere i vari indicatori più probabili (255, 32767, 65535, 2M14) Perché sono indicatori è direttamente collegato alla natura bytewise di memoria interna, ma la conversione non è la parte importante.

Non sono d'accordo sul fatto che devi conoscerlo per i bitflags (perché in un corso introduttivo di programmazione, le costanti nominate sono molto più istruttive e utili).


0

Se vai nella programmazione integrata di basso livello, utilizzerai esadecimali. È usato per cose come specificare schemi di bit nei registri hardware e valori di byte nei dump della memoria. Imparerai anche a usare ogni operatore bit-saggio in qualunque linguaggio di programmazione tu usi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.