2015-09-10 38 views
9

Un byte è composto da 8 bit sulla maggior parte dei sistemi.Perché esistono i byte? Perché non usiamo solo bit?

Un byte rappresenta in genere il tipo di dati più piccolo che un programmatore può utilizzare. A seconda della lingua, i tipi di dati potrebbero essere chiamati char o byte.

Esistono alcuni tipi di dati (booleani, interi piccoli, ecc.) Che possono essere memorizzati in meno bit di un byte. Tuttavia, l'utilizzo di meno di un byte non è supportato da alcun linguaggio di programmazione di cui sia a conoscenza (in modo nativo).

Perché esiste questo minimo di 8 bit per memorizzare i dati? Perché abbiamo anche bisogno di byte? Perché i computer non utilizzano solo incrementi di bit (1 o più bit) anziché incrementi di byte (multipli di 8 bit)?

Nel caso in cui qualcuno chieda: non sono preoccupato. Non ho esigenze specifiche. Sono solo curioso.

+1

Alcuni syste ms usa altre dimensioni in byte invece di 8 bit –

+0

@ M.M True. Ma i sistemi più moderni usano 8 da quello che capisco. Indipendentemente dal numero utilizzato su qualsiasi sistema specifico, la mia domanda rimane: qual è la ragione per i byte? –

+0

Immagina la vita senza astrazione. – paddy

risposta

4

perché a livello di hardware la memoria è naturalmente organizzata in blocchi indirizzabili. Piccoli pezzi vuol dire che puoi avere cose a grana fine come i numeri a 4 bit; i blocchi più grandi consentono operazioni più efficienti (in genere una CPU sposta le cose in "blocchi" o più di esse). In particolare, i blocchi più grandi indirizzabili rendono più grandi gli spazi di indirizzamento. Se ho pezzi che sono 1 bit, un intervallo di indirizzi di 1 - 500 copre solo 500 bit mentre 500 blocchi di 8 bit coprono 4000 bit.

Nota: non erano sempre 8 bit. Ho lavorato su una macchina che pensava in 6 bit. (buon vecchio ottale)

1

A mio parere, è un problema di indirizzamento. Per accedere a singoli bit di dati, occorrerebbero otto volte più indirizzi (aggiungendo 3 bit a ciascun indirizzo) rispetto all'utilizzo dell'accesso a singoli byte. Il byte è in genere la più piccola unità pratica per contenere un numero in un programma (con solo 256 valori possibili).

+0

Grazie per la risposta. Mi chiedo allora: avere 8 volte più indirizzi causa problemi? –

+0

@ TomDworzanski Penso che 8-bit sia la dimensione naturale. Perché 4-bit non può nemmeno contenere l'alfabeto inglese. Non è affatto utile. E 16 bit è troppo grande per alcune manipolazioni di dati, ad es. dati di testo. – cshu

+1

@ TomDworzanski come ho spiegato, ma formulato male, avendo 8 volte più indirizzi richiede 3 bit in più di dati in un indirizzo per determinare quale bit viene selezionato. Nel complesso, ciò sarebbe terribilmente inefficiente, specialmente considerando che i bit da soli sono quasi inutili. Immagina di pianificare una città in cui ogni edificio ha otto stanze e ogni stanza ha un indirizzo unico.Se si desidera identificare gli edifici nel loro insieme, ci sono sette indirizzi non necessari per edificio. Questo è uno scenario simile. – sneelhorses

0

Buon modo per scrivere qualcosa a tarda notte!

I tuoi punti sono perfettamente validi, tuttavia, la storia sarà sempre quel folle intruso come avrebbe rovinato i tuoi piani molto prima che tu nascessi.

Ai fini della spiegazione, immaginiamo una macchina fittizia con un'architettura del nome di Bitel (TM) all'interno di o qualcosa di simile. Le specifiche Bitel impongono che l'Unità centrale di elaborazione (CPU, cioè microprocessore) deve accedere alla memoria in unità di un bit. Ora, diciamo che una determinata istanza di una macchina operata da Bitel ha un'unità di memoria che contiene 32 miliardi di bit (il nostro equivalente fittizio di un'unità RAM da 4 GB).

Ora, vediamo perché Bitel, Inc. entrato in fallimento:

  • Il codice binario di qualsiasi dato programma sarebbe enorme (il compilatore avrebbe dovuto manipolare ogni singolo bit!)
  • Gli indirizzi a 32 bit sarebbero (anche più) limitati a contenere solo 512 MB di memoria. I sistemi a 64 bit sarebbero al sicuro (per ora ...)
  • Gli accessi alla memoria sarebbero letteralmente una situazione di stallo.Quando la CPU ha tutti questi 48 bit, deve elaborare una singola istruzione ADD, il floppy sarebbe già stato scaricato per troppo tempo e sai cosa succede dopo ...
  • Chi il **** veramente necessità di ottimizzare un singolo bit? (Vedi la precedente dichiarazione di bancarotta).
  • Se è necessario gestire i bit singoli, imparare a utilizzare bitwise operators!
  • I programmatori impazzirebbero come sia il caffè e RAM diventano troppo costosi. Al momento, questo è un sinonimo perfetto di apocalisse.
  • Lo standard C è sacro e sacro e richiede che l'unità minima indirizzabile (ad esempio, char) sia almeno 8 bit di larghezza.
  • 8 è una potenza perfetta di 2. (1 è un altro, ma meh ...)
0

Prima di tutto, C e C++ hanno il supporto nativo per bit-fields.

#include <iostream> 
struct S { 
    // will usually occupy 2 bytes: 
    // 3 bits: value of b1 
    // 2 bits: unused 
    // 6 bits: value of b2 
    // 2 bits: value of b3 
    // 3 bits: unused 
    unsigned char b1 : 3, : 2, b2 : 6, b3 : 2; 
}; 
int main() 
{ 
    std::cout << sizeof(S) << '\n'; // usually prints 2 
} 

Probabilmente una risposta risiede in allineamento prestazioni e la memoria, e il fatto che (io calcolo anche perché byte è chiamato char in C) byte è la più piccola parte di parola della macchina che può contenere un 7-bit ASCII. Le operazioni di testo sono comuni, quindi il tipo speciale per il testo semplice ha il suo vantaggio per il linguaggio di programmazione.

0

Alcune CPU utilizzano le parole per indirizzare la memoria anziché i byte. Questo è il loro tipo di dati naturali, quindi 16 o 32 bit. Se le CPU Intel lo facessero sarebbe 64 bit.

I byte da 8 bit sono tradizionali perché i primi computer di casa popolari utilizzavano 8 bit. 256 valori sono sufficienti per fare un sacco di cose utili, mentre 16 (4 bit) non sono abbastanza.

E, una volta che una cosa va avanti abbastanza a lungo diventa terribilmente difficile da cambiare. Questo è anche il motivo per cui il tuo disco fisso o SSD probabilmente finge ancora di usare blocchi da 512 byte. Anche se l'hardware del disco non utilizza un blocco da 512 byte e nemmeno il sistema operativo. (Le unità di formattazione avanzate dispongono di un interruttore software per disabilitare l'emulazione 512 byte, ma generalmente solo i server con i controller RAID lo disattivano.)

Inoltre, le CPU Intel/AMD hanno così tanto silicio in più che fa così tanto lavoro di decodifica extra che la leggera differenza in 8 bit contro l'indirizzamento a 64 bit non aggiunge alcun overhead apprezzabile. Il controller di memoria della CPU non utilizza certamente 8 bit. Estrae i dati nella cache in lunghi flussi e la dimensione minima è la linea della cache, spesso 64 byte, ovvero 512 bit. Spesso l'hardware della RAM è lento per l'avvio, ma veloce per lo streaming, quindi la CPU legge i kilobyte nella cache L3, proprio come gli hard disk leggono un'intera traccia nelle loro cache perché la testina è già lì, quindi perché no?

2

Il nastro di carta (anni '50) era largo 5 o 6 fori (bit), forse altre larghezze. Le carte perforate (il tipo più nuovo) erano 12 file di 80 colonne.

1960:
B-5000 - 48-bit "parole" con caratteri 6-bit
CDC-6600 - le parole di 60 bit con caratteri 6-bit
IBM 7090-36 bit parole con Caratteri a 6 bit
C'erano macchine a 12 bit; ecc.

Ottieni l'immagine?Gli americani hanno capito che i personaggi potevano essere memorizzati in soli 6 bit.
Poi abbiamo scoperto che c'erano più cose al mondo che solo inglese.
Quindi siamo andati in giro con ASCII a 7 bit e EBCDIC a 8 bit.

Alla fine abbiamo deciso che 8 bit erano sufficienti per tutti i personaggi di cui avremmo mai avuto bisogno. ("Noi" non eravamo cinesi.)

IBM-360 è uscito come la macchina dominante negli anni '60 -'70; era basato su un byte da 8 bit. (Aveva un po 'di parole a 32 bit, ma diventava meno importante del byte onnipotente

Sembrava un tale spreco usare 8 bit quando tutto ciò che avevi davvero bisogno di 7 bit per memorizzare tutti i personaggi che avevi sempre avuto bisogno

IBM, a metà del 20 ° secolo "possedeva" il computer contrassegnato con il 70% delle vendite di hardware e software. Con 360 come loro principale macchina, byte da 8 bit era la cosa per tutti i concorrenti da copiare .

Alla fine ci siamo accorti che esistevano altre lingue e si avvicinò con Unicode/UTF8 e le sue varianti. Ma questa è un'altra storia.