2009-07-16 11 views
32

Stavo insegnando C a mio fratello minore che studiava ingegneria. Gli stavo spiegando come diversi tipi di dati sono effettivamente memorizzati nella memoria. Gli ho spiegato la logistica dietro aver firmato/numeri non firmati e bit in virgola mobile in numeri decimali. Mentre gli stavo raccontando di char type in C, l'ho portato anche attraverso il sistema di codice ASCII e anche come char è anche memorizzato come un numero di 1 byte.C'è qualche logica dietro l'ordinamento dei codici ASCII?

Mi ha chiesto perché "A" è stato dato codice ASCII 65 e non qualcos'altro? Allo stesso modo, perché a "a" viene dato specificamente il codice 97? Perché c'è una lacuna di 6 codici ascii tra la gamma di lettere maiuscole e minuscole? Non ne avevo idea. Potete aiutarmi a capire questo, poiché questo ha creato anche una grande curiosità per me. Non ho mai trovato nessun libro finora che abbia discusso di questo argomento.

Qual è la ragione di questo? I codici ASCII sono logicamente organizzati?

+3

Mentre è bello parlare di float e decimali in modo non tecnico, la maggior parte dei float là fuori in natura sono il punto di virgola mobile, non il virgola mobile decimale, che è fonte di molta confusione per i programmatori . È come insegnare che il sole orbita intorno alla terra - bene per i bambini capire la notte e il giorno, ma confondendo per gli scienziati razzi in erba. –

+0

Correlati: [Cose che ogni hacker una volta sapeva] (http://www.catb.org/esr/faqs/things-every-hacker-once-knew/) (su ASCII e tecnologie correlate) –

risposta

65

Ci sono ragioni storiche, principalmente per rendere codici ASCII facile da convertire:

Cifre (0x30 a 0x39) hanno il prefisso binario 110000:

0 is 110000 
1 is 110001 
2 is 110010 

ecc Quindi, se si cancella la prefisso (i primi due "1"), si finisce con la cifra in decimale codificato in binario.

lettere maiuscole hanno il prefisso binario 1000000:

A is 1000001 
B is 1000010 
C is 1000011 

ecc Stessa cosa, se si rimuove il prefisso (il primo '1'), si finisce con caratteri alfabetici indicizzato (A è 1 , Z è 26, ecc.).

lettere minuscole hanno il prefisso binario 1100000:

a is 1100001 
b is 1100010 
c is 1100011 

ecc Idem come sopra. Quindi se aggiungi 32 (100000) a una lettera maiuscola, hai la versione minuscola.

+2

Acquista perché è 'A' 65 anziché 64? Qualsiasi codifica ha un certo grado di logica e un certo grado di arbitrarietà –

+0

@JimBalter Perché volevano che l'alfabeto fosse a 1 indice. 1 è A, 26 è Z. –

+0

@NathanLong Non c'è motivo di volerlo e nessuna prova che sia vero. E 65 non è 1. Sottrarre 63 dalla lettera produrrebbe 1-indexing. –

0
  • 'A' è 0x41 in esadecimale.
  • 'a' è 0x61 in esadecimale.
  • '0' attraverso '9' è 0x30 - 0x39 in esadecimale.

Così almeno è facile da ricordare i numeri per A, a e 0-9. Non ho idea dei simboli. Vedi The Wikipedia article on ASCII Ordering.

6

Qui è storia molto dettagliata e la descrizione dei codici ASCII: http://en.wikipedia.org/wiki/ASCII
In breve:

  • ASCII è basato su standard di codifica telescrivente
  • primi 30 caratteri sono "non stampabile" - utilizzato per la formattazione del testo
  • quindi continuano con caratteri stampabili, approssimativamente per essere posizionati sulla tastiera. Controlla la tua tastiera:
    • spazio,
    • maiuscolo segno sulla tappi numero:!,", #, ...,
    • numeri
    • segni di solito posto alla fine della fila tastiera con i numeri - maiuscole
    • lettere maiuscole, in ordine alfabetico
    • segni solitamente posti all'estremità delle file di tastiera con le lettere - maiuscole
    • lettere minuscole, ordine alfabetico
    • segni di solito collocati alla fine del file di tastiera con le lettere - minuscole
+0

Alcune vecchie tastiere (lo so l'Atari 800 era uno) aveva il "carattere sul tasto 2, quindi la corrispondenza tra codifica e ordine della tastiera era più ravvicinata – dan04

4

La distanza tra A e a è 32. Questo è il numero piuttosto rotondo, non è vero?

Il divario di 6 caratteri tra lettere maiuscole e minuscole è perché (32 - 26) = 6. (Nota: ci sono 26 lettere nell'alfabeto inglese).

+3

L'alfabeto inglese ha 26 caratteri se si fanno supposizioni ingenue su parole prese in prestito –

+1

In realtà ï è la stessa lettera come se non fosse un segno diacritico, e mentre l'inglese ha preso in prestito parecchie parole non credo che abbia preso in prestito lettere come þ (islandese) o IJ (olandese) – MSalters

0

Se si guardano le rappresentazioni binarie per 'a' e 'A', si vedrà che differiscono solo di 1 bit, il che è piuttosto utile (trasformare maiuscole e minuscole o viceversa è solo un questione di lanciare un po '). Perché iniziare in modo specifico, non ne ho idea.

10

Questo grafico lo mostra abbastanza bene da wikipedia: Notare le due colonne del controllo 2 del 2 superiore di inferiore, e quindi gli spazi vuoti riempiti con misc. ASCII Chart on Wikipedia

Anche tenere a mente che ASCII è stato sviluppato sulla base di ciò che era accaduto prima. Per ulteriori dettagli sulla cronologia di ASCII, vedere this superb article by Tom Jennings, che include anche il significato e l'utilizzo di alcuni dei caratteri di controllo di straniero.

+0

Il link sembra essere rotto –

0

Wikipedia:

Il codice stesso era strutturato in modo che maggior parte dei codici di controllo erano insieme, e tutti codici grafici erano insieme. Le prime due colonne (32 posizioni) erano riservate ai caratteri di controllo. [14] Il carattere "spazio" doveva venire prima della grafica per rendere facile l'ordinamento degli algoritmi , quindi diventava la posizione 0x20. [15] Il comitato ha deciso che era di lettere maiuscole e minuscole e ha scelto la struttura ASCII in modo che potesse essere facilmente ridotto a un set di caratteri utilizzabile da di codici grafici [16]. Le lettere minuscole non sono state quindi intercalate con lettere maiuscole. Per mantenere le opzioni aperte per le lettere minuscole e altri la grafica, le speciali e numerici codici sono stati collocati prima delle lettere, e la lettera 'A' è stata posta in posizione 0x41 che corrisponda al progetto della corrispondente britannico di serie . [17] Le cifre 0-9 erano posizionate in modo che corrispondessero ai valori nel binario con prefisso 011, rendendo la conversione con decimale codificato in codice binario semplice.

Problemi correlati