È possibile convertire i decimali in binari e binari in decimali. Ma come si può rappresentare il numero "256"?
255 = 11111111
1 byte non può contenere più di 8 cifre binarie (bit). Com'è possibile?
È possibile convertire i decimali in binari e binari in decimali. Ma come si può rappresentare il numero "256"?
255 = 11111111
1 byte non può contenere più di 8 cifre binarie (bit). Com'è possibile?
Risposte:
Chiedete come rappresentare 256 in binario, ma immagino che vi stiate chiedendo perché la gente dice che i byte possono memorizzare 256 numeri diversi, quando il numero più grande che memorizza è 255. Come ha detto Claudiop, i computer iniziano a contare da 0, quindi 0 è in realtà il primo numero, 1 è il secondo, 2 è il terzo ... 255 è il 256 °.
Inoltre, 11111111 è solo 255 per byte senza segno. Quando si dispone di un byte con segno (un valore con segno può contenere valori negativi), 11111111 è in realtà -1. Vedi http://en.wikipedia.org/wiki/Two's_complement . Il modo in cui funziona il complemento a due, aggiungendo un numero negativo a un numero positivo risulta in 0. Come altri hanno già detto, se aggiungiamo un bit a 11111111 e il tuo tipo di dati può supportare solo 8 bit, l'ultimo bit traboccerà e ti lascerà con 0. Per i byte con segno, i valori vanno da -128 a 127. 128 numeri negativi + 0 + 127 numeri positivi = 256 numeri totali.
Per i valori con segno, il primo bit è il bit "segno". Se questo bit è impostato, il numero è negativo. 10000000 è negativo, 01000000 è positivo, 11111111 è negativo, 01111111 è positivo ...
Se sei su Windows (forse anche Mac ha), puoi aprire la calcolatrice, passare alla modalità programmatore, scegliere sbyte e giocare con i bit per vedere come sono correlati alle loro rappresentazioni decimali.
Bene, hai bisogno di 2 byte per rappresentarlo. 256 = 00000001 00000000
Come già sapete, 255d (decimale) è uguale a 11111111b (binario). Se ora vuoi aggiungere 1 al valore, ci sono due possibilità:
O hai solo 8 bit. In questo caso, si verifica un cosiddetto overflow . Quindi, "internamente", verrà aggiunto l'1 risultante in 100000000b (256d in 9 bit). Ma poiché sono disponibili solo 8 bit, gli 8 bit inferiori verranno "restituiti". Quindi finisci con 0d = 0b (un flag di overflow speciale verrà impostato sulla maggior parte delle architetture di computer, proprio come una nota a margine).
Pensa allo stesso modo di contare con le dita. Immagina che le tue dita mostrino 9d. Ora aggiungi un altro dito. Si finisce con 10. Cosa fai se vuoi aggiungerne ancora uno?
L'altra possibilità è che tu abbia più di 8 bit disponibili. In questo caso puoi semplicemente aggiungere un'altra cifra all'inizio e il risultato sarà davvero 100000000b = 256d.
Un byte è la più piccola "unità" che un sistema informatico (sistema di memoria) può indirizzare. Ciò significa che se vuoi sapere solo un singolo bit, devi chiedere al sistema di memoria di darti un determinato byte da un indirizzo e poi devi capire il valore del bit che ti interessa.
Ma allo stesso modo in cui 8 bit compongono un byte, ci sono anche tipi di dati più grandi. 2 byte formano una parola (16 bit), due parole (quattro byte, 32 bit) formano una doppia parola. E oggi le architetture standard a 64 bit hanno persino tipi di dati a 64 bit (i cosiddetti registri).
È possibile rappresentarlo mediante un'operazione di spostamento dei bit (sinistra o destra a seconda dell'endianità della rappresentazione binaria). Ad esempio, questo liner funziona per una rappresentazione big endian (prima il byte più significativo):
1 << 8
Un byte senza segno può contenere solo 256 valori che includono l'intervallo di [0 - 255]. Per il valore 256 è necessario utilizzare un tipo di dati in grado di contenere un valore maggiore, ad esempio un numero intero.