Nella memoria interna del computer Char value, string e integer come differenziano il tempo di memorizzazione e recupero.
- Char A = ASCI value 127
- Valore int 127
Il binario è lo stesso di come il computer comprende questo valore ..
Nella memoria interna del computer Char value, string e integer come differenziano il tempo di memorizzazione e recupero.
Il binario è lo stesso di come il computer comprende questo valore ..
È tutto basato sul contesto. In realtà non differiscono affatto.
Supponiamo di avere due array. Uno contiene i personaggi
foo = 'test'
un altro contiene i seguenti valori decimali:
bar = [116, 101, 115, 116, 0]
Ora diciamo che abbiamo una funzione sum
che prende una matrice e somma i suoi valori. Lo chiamiamo con
sum(bar)
e il risultato è 448.
Ora chiamalo con
sum(foo)
e il risultato è nuovamente 448. Sorpresa.
Ok, un'altra funzione selezionata uppercase
che prende una stringa e la restituisce in maiuscolo.
uppercase(foo)
restituisce 'TEST', ma
uppercase(bar)
farà lo stesso!
Questo ignora qualsiasi tipo di controllo che il tuo linguaggio di programmazione può fare. Quindi, se hai definito una variabile come stringa e l'altra come una matrice di numeri interi, il compilatore potrebbe lamentarsi e il tuo codice non verrà compilato. Ma questa è una sorta di "meta" che fa presupposizioni sui tuoi dati che non hanno nulla a che fare con la rappresentazione molto più semplice sul livello di memoria in cui tutte le cose sono solo numeri.
Ma se hai una lingua in cui puoi disattivarla o ignorarla o usare l'assemblatore direttamente a livello di macchina dove le tue "variabili" sono solo indirizzi in memoria, gli esempi precedenti mostrano il comportamento sottostante.
In realtà ho aggiunto lo zero finale nel mio esempio solo perché alcune lingue richiederebbero che una stringa venisse chiusa in quel modo. Quindi anche questo non è esattamente obbligatorio, ma esiste solo perché un certo contesto lo richiede.
Ma questa cosa è vera solo per le semplici rappresentazioni di stringa. Il linguaggio C si aspetta che la stringa termini con zero, Pascal si aspetterebbe che avesse la lunghezza come primo elemento: [4, 116, 101, 115, 116]
Le lingue orientate agli oggetti potrebbero memorizzarle in modo ancora più complicato. Le stringhe non ASCII come UTF8, Unicode etc sarebbero piuttosto complesse. (anche se la parte dei dati si ritrova a un certo punto solo una serie di numeri che in teoria possono essere gestiti in qualsiasi modo)
Leggi altre domande sui tag functional-programming object-oriented-design binary