La potenza di due bit per parola è "conveniente"? Se lo è, perché?


11

Trovo diverse fonti che affermano che la potenza di due bit in una parola binaria (come 8 bit per byte) sia una "cosa buona" o "conveniente". Non trovo alcuna fonte che indichi il perché.

Da Qual è la storia del perché i byte sono otto bit? leggiamo nella risposta approvata:

I computer binari motivano i progettisti a creare potenze di due dimensioni.

Ok ma perche? Nella stessa domanda ma nel campo dei commenti per la domanda trovo:

L'ultima frase è per scherzo? Un byte a 12 bit sarebbe scomodo perché non è una potenza di 2. - robjb

Ancora una volta, privo di logica ...

i calcoli degli indirizzi sono molto più semplici con potenze di 2, e questo conta quando stai realizzando la logica con transistor grezzi in piccole lattine - Mike

Poiché i byte sono l'unità indirizzabile più piccola, questo non ha molto senso. Molti commenti sul commento però. Forse mi sono perso qualcosa.

Da Wikipedia :

Lo standard di fatto di otto bit è una potenza conveniente di due che consente i valori da 0 a 255 per un byte

E questo sarebbe conveniente perché ...?

Per chiarimenti, si tratta del numero di bit per byte (ad es. 8 o 6, ecc.), Non del numero di valori per byte (ad es. 2 8 o 2 6 , ecc.). A causa della confusione, sottolineo anche che non si tratta di dimensioni di Word.

Non sono eccessivamente interessato alle ragioni storiche. Quelli sono stati ben spiegati altrove (vedi link).


Domanda correlata su SO: /programming/1606827/why-is-number-of-bits-always-a-power-of-two


2
@gnat Sono abbastanza sicuro che stiamo parlando del numero di bit per byte (cioè 8 in un byte a 8 bit) qui, non del numero di valori che un byte può rappresentare (cioè 2 ^ 8 in un byte a 8 bit). Quindi, se ad esempio hai un byte a 6 bit, 6 non è una potenza di due , ma sì, un byte a 6 bit può rappresentare una potenza di due numeri di valori.
settembre

2
@ 8bittree Penso di averlo capito, grazie per avermi spiegato! (voto duplicato ritirato - anche se penso che sarebbe più facile per i lettori se una spiegazione come nel tuo ultimo commento venisse modificata nella domanda, questa cosa sembra piuttosto sottile)
moscerino

2
Domanda simile su SO: stackoverflow.com/q/1606827/3723423 - la risposta porta alcuni argomenti plausibili sulla convenienza
Christophe,

2
@Snowman: il post dell'OP contiene un errore di "elemosinare la domanda": "Perché i poteri di due dimensioni di byte sono considerati convenienti?" Non lo sono. Non ha nulla a che fare con i poteri di due; ha letto male la frase nell'articolo di Wikipedia.
Robert Harvey,

3
@RobertHarvey Nella risposta a "Qual è la storia del perché i byte sono otto bit?" (anche collegato alla mia domanda) c'è la seguente frase: "I computer binari motivano i progettisti a creare potenze di due dimensioni". Ho letto male anche questo? Cosa significano entrambe le fonti secondo te? Dire semplicemente "hai sbagliato" non lo sta davvero facendo per me.
Andreas,

Risposte:


10

Non credo che i byte a 8 bit abbiano avuto successo perché hanno una larghezza che è una potenza di due. Se non vuoi indirizzare i bit individualmente - e questa è una caratteristica comune né ora né in passato - avere un potere di due non ha alcuna reale importanza pratica (è solo - ora molto più che in passato quando risparmi alcuni componenti discreti erano importanti: un riflesso per gli ingegneri hardware e software e rimanere su un terreno familiare è importante per altri scopi), e non ricordo di aver visto menzionato nella mia storia delle letture informatiche (1). Uno aveva bisogno di lettere minuscole, il che significava qualcosa di più dei set di caratteri a 6 bit allora dominanti. ASCII era a 7 bit, ma allora ASCII era puramente per quanto riguarda l'interscambio (e quindi da tradurre in codice interno per la gestione), e quindi

Il Subcommmitee riconosce che è improbabile che i produttori di computer progettino computer che utilizzano codici a 7 bit internamente. È più probabile che utilizzino codici a 4, 6 e 8 bit. Al momento non è necessario diffondere lo scambio di oltre 128 caratteri separati e distinti tra computer e tra computer e apparecchiature di input / output associate. [il nastro di carta, che aveva una dimensione del frame naturale di 8 bit ma necessitava di parità quindi il carico utile di un frame era di 7 bit è anche citato a favore del carattere a 7 bit per ASCII, la potenza di due non è citata tra i vantaggi di 8 bit ] (2)

e per il byte hardware a 8 bit vinto perché permetteva di impacchettare 2 cifre decimali in un byte alla volta quando il 75% dei dati era numerico e rappresentato in BCD (3).

(1) ad esempio Blaauw e Brooks, Computer Architecture ; MacKenzie, Set di caratteri codificati, Storia e sviluppo hanno entrambi una discussione su questo argomento.

(3) Documento di X3.2 - il sottocomitato responsabile di ASCII - citato da MacKenzie.

(3) MacKenzie, di nuovo.


1
Grazie. La tua risposta è perfetta e hai portato riferimenti. Hai il mio voto. Mi rendo conto che se ciò che dici è vero è anche impossibile dimostrarlo. Non posso provare la non esistenza di qualcosa. Immagino che dovrei davvero interagire con quelli che affermano "convenienza" e controllare le loro fonti. Forse è solo una voce diffusa.
Andreas,

L'altro fattore di convenienza è che un byte può essere rappresentato facilmente come due valori esadecimali. Inserire due decimali con codice binario (BCD) in un byte è più comunemente indicato come decimale compresso. Questo è stato effettivamente considerato conveniente perché i decimali possono essere letti come decimali quando i dati sono visualizzati in esadecimale.
JimmyJames,

I byte a 12 bit possono essere rappresentati facilmente come tre valori esadecimali. E puoi memorizzare tre numeri BCD in un byte a 12 bit. Sicuramente è molto meglio di due valori esadecimali e due numeri BCD. In realtà, un byte a 10 bit può contenere tre cifre decimali. E penso che sia così che funziona lo standard decimale IEEE in virgola mobile.
gnasher729,

1
@JimmyJames, penso che tu abbia la causalità invertita con esadecimale. L'esadecimale è diventato popolare perché era un modo compatto per rappresentare byte a 8 bit, in precedenza l'ottale era molto più popolare (ed era più popolare su una macchina come il PDP-11 che aveva byte a 8 bit ma in cui i campi a 3 bit erano significativi nella codifica del set di istruzioni).
AProgrammer,

@ gnasher729, il byte a 8 bit è un figlio degli anni '60. Passare dal carattere a 6 bit al carattere a 12 bit era impensabile negli anni '60. Anche oggi, quando siamo molto meno limitati, UTF-8 è popolare perché UTF-16 è considerato troppo dispendioso. Un byte a 10 bit era quasi impensabile e anche la codifica a 10 bit per 3 cifre decimali è totalmente poco pratica quando si esaminano i valori nei registri e nella memoria con un pannello frontale senza parlare dell'impatto sull'implementazione con la tecnologia del tempo.
AProgrammer,

2

Oltre all'incidente storico, non vi è alcun motivo particolare per cui dovremmo usare 8/16/32/64 bit. Suppongo che 12/24/48/96 bit sarebbe davvero più utile.

Per la gestione del testo, Unicode usando un ipotetico UTF-24 sarebbe più economico di UTF32; l'ipotetico UTF-12 memorizzerebbe tutti i caratteri UTF-8 a byte singolo e doppio in 12 bit e tutti i caratteri UTF-8 a triplo e quad byte in 24 bit (l'intervallo sarebbe leggermente ridotto a 2 ^ 20 caratteri, ma è ancora quattro volte più di quanto sia generosamente usato); il codice sarebbe più semplice perché ci sono solo due varianti.

Per il virgola mobile, di solito è sufficiente 48 bit. 96 bit è sostanzialmente migliore di 80 bit esteso. 24 bit è utile per la grafica; molto più utile dei 16 bit supportati da alcune schede grafiche. I puntatori a 48 bit possono gestire 256 terabyte.

L'unico svantaggio è rappresentato dagli array di bit, in cui è necessaria una divisione per 12 per calcolare le posizioni dei byte. Se questo è ritenuto importante, sono sicuro che la divisione per 12 può essere implementata in modo abbastanza efficiente nell'hardware.


Punto interessante sull'UTF, sebbene leggermente fuori tema. La dimensione in byte (o bit) in virgola mobile è una battaglia senza fine tra memoria e precisione in cui devi solo convivere con l'uno o l'altro. Un buon punto anche sugli array di bit.
Andreas,

1
Pensieri interessanti, ma non sono sicuro che questo risponda alla domanda.

1
La domanda era: "Perché gli otto bit sono considerati convenienti". Sicuramente dicendo "non è" risponde alla domanda.
gnasher729,

1
@ gnasher729 La domanda era: "Perché la potenza di due bit per byte è considerata conveniente", anche se la tua risposta sembra valere altrettanto.
settembre 1116

2
I commenti non sono per una discussione estesa; questa conversazione è stata spostata in chat .
yannis,

2

Ciò è conveniente grazie alle architetture hardware comuni che utilizzano multipli di 8, ad esempio architetture a 32 e 64 bit. Ciò significa una maggiore efficienza quando si utilizza l'archiviazione e la trasmissione dei dati a 8 bit.

"Tuttavia, le considerazioni di economia nel design spingono fortemente per una dimensione, o per pochissime dimensioni correlate da multipli o frazioni (sottomultipli) a una dimensione primaria. Quella dimensione preferita diventa la dimensione delle parole dell'architettura."

Word (architettura del computer)

Vedi anche: Qual è la storia del perché i byte sono otto bit?


5
Non accetterò questo come risposta. La mia domanda è perché la potenza di due è conveniente, non perché defacto standard è a 8 bit. E la storia dietro 8-bit menziona 5, 6 e 7 bit usati per ragioni reali, mentre passare da 7 a 8 è motivato da un "meh, perché no". Ho avuto la sensazione di leggere diverse fonti di potenza in più rispetto alla compatibilità con i sistemi attuali. (In realtà l'8-bit ha dato la parità dei set di caratteri a 7-bit.) Word è una cosa diversa in cui ottengo il vantaggio della potenza di due dimensioni, cioè lo spostamento può essere usato al posto del mult nei calcoli.
Andreas,

3
@RobertHarvey Questa domanda non riguarda il numero di stati per switch (ovvero binario vs trinario o più), si tratta di quanti switch raggruppare. Vedi la mia modifica alla domanda.
settembre

2
Per quanto riguarda la modifica, non esiste una distinzione significativa tra il numero di bit per byte e il numero di valori per byte. Sono due modi per esprimere la stessa cosa. Il numero di valori che un byte può contenere segue direttamente dal numero di bit che contiene: un byte ha 8 bit e quindi può contenere valori fino a 2⁸-1.
Robert Harvey,

2
Logicamente, ne consegue che si sceglie una dimensione per byte che può contenere un intervallo numerico che è conveniente. ASCII è di 7 bit perché fornisce 128 valori diversi, sufficienti per codificare entrambi i casi dell'alfabeto romano, caratteri numerici, punteggiatura, caratteri di controllo e diversi caratteri speciali. Un byte può contenere 7 bit ASCII e un bit di parità per il controllo degli errori, per un totale di 8 bit, adatti per un tipo di tel. Da allora usiamo quella dimensione per un byte.
Robert Harvey,

2
@JeremyKato I dispositivi che ho citato sono più vecchi (anni 60-80, per la maggior parte), motivo per cui probabilmente non li conosci. ASCII, in realtà è una codifica a 7 bit (la parità non fa parte dello standard). Ma per la parte principale del tuo commento, no, non mi manca nulla. Capisco che ci sono ragioni per cui 8 bit in particolare sono convenienti, quello che tu e Robert Harvey mancate è che la domanda si pone sui poteri di 2 bit in generale , non specificamente su 8 bit.
settembre 1116

1

Secondo l'articolo di Wikipedia per parola , questo rende significativamente più semplici i calcoli relativi all'indirizzamento della memoria:

Diverse quantità di memoria vengono utilizzate per memorizzare valori di dati con diversi gradi di precisione. Le dimensioni comunemente utilizzate sono in genere una potenza di due multipli dell'unità di risoluzione dell'indirizzo (byte o parola). La conversione dell'indice di un elemento in un array nell'indirizzo dell'articolo richiede quindi solo un'operazione di spostamento anziché una moltiplicazione. In alcuni casi questa relazione può anche evitare l'uso delle operazioni di divisione. Di conseguenza, la maggior parte dei design di computer moderni ha dimensioni di parole (e altre dimensioni di operandi) che hanno una potenza doppia rispetto alla dimensione di un byte.


2
Sì, potenza pari a due volte la dimensione di un byte. Non esiste una ragione intrinseca per cui un byte dovrebbe essere di otto bit e non di nove, dodici o quindici.
gnasher729,

@ gnasher729, molto più facile da dividere per 8 (o 16 o 32 o 64) rispetto a dividere per 9, 12 o 15.
robert bristow-johnson

@ gnasher729 se la parola è una potenza di 2 bit e una potenza di 2 byte, ciò implica che il byte deve essere una potenza di 2 bit
vartec

@vartec L'articolo e la citazione dicono "Le dimensioni comunemente usate sono in genere una potenza di due multipli dell'unità di risoluzione dell'indirizzo (byte o parola)" e "la maggior parte dei design di computer moderni ha dimensioni di parole (e altre dimensioni di operandi) che sono un potere di due volte la dimensione di un byte. " Ho letto "dimensione della parola" è misurato in byte, non bit. Non vi è alcuna regola sulla dimensione delle parole in bit è o dovrebbe essere potenze di 2 nell'articolo.
Andreas,

@vartec: IF. Ovviamente nessuno avrebbe costruito una macchina con parole a 32 bit e byte a 12 bit. Ma nulla parla contro una macchina con parole a 48 o 96 bit e byte a 12 bit. E ci sono state macchine in cui una parola era di dieci byte.
gnasher729,

0

È strettamente correlato allo spazio degli indirizzi. Aggiungendo un po 'di più al bus degli indirizzi, è possibile indirizzare il doppio delle posizioni di memoria. Quindi, quando aggiungi quella linea aggiuntiva, puoi anche usarla per intero.

Ciò porta a una progressione naturale di 1, 2, 4, 8, 16, 32 eccetera.

A livello tecnico di produzione è anche facile ripetere lo stesso schema litografico. Cioè, per raddoppiarlo. Se inizi con un fermo e poi raddoppi il motivo, passerai 8, non 6, 10 o 12.


1
In che modo è correlato al numero di bit in un byte? Stai seriamente affermando che un AND logico a 32 bit è più facile da implementare di 36 o 28 bit?
gnasher729,

1
Non ho presentato alcuna richiesta in tal senso. Il mio suggerimento è che deriva da precedenti progetti che sono stati progressivamente estesi in larghezza man mano che i transistor diventavano più economici e i circuiti integrati consentivano circuiti più piccoli.
Martin Maat,

1
Teoria interessante sul livello tecnico di produzione. Potresti essere su qualcosa. Potresti estendere il paragrafo o forse fornire un link che spieghi le basi?
Andreas,

1
Non ha senso. Ad esempio, in una scheda grafica in cui sono necessari tutti i tipi di bit dispari in vari punti, tutto viene fatto esattamente con le dimensioni richieste e non un po 'di più. Se un decodificatore h.264 necessita di una precisione di 19 bit per alcune operazioni, l'hardware implementa 19 bit e non 20 o 24 o 32. E mi scusi, non manipolate i modelli litografici. È possibile definire l'hardware e quindi eseguirlo attraverso alcuni software che creano il layout.
gnasher729,

1
@MartinMaat: stai confondendo marketing + standardizzazione con motivi tecnologici. E la tecnologia è ciò di cui stiamo discutendo.
gnasher729,

0

Non sempre le larghezze di parole hanno una potenza di due. Recentemente ho fatto un po 'di codifica in un DSP SHArC che ha una larghezza di parola di 32 bit per i numeri ma non per i codici operativi (che sono larghi 48 bit).

Probabilmente il motivo per cui la larghezza delle parole è una potenza di due è dovuto ad alcune istruzioni che testano (o impostano o cancellano o alternano) un singolo bit o spostano (o ruotano) a sinistra o a destra di un determinato numero di bit. C'è un campo bit nel codice operativo per specificare la posizione del singolo bit o il numero di bit da spostare. Se la larghezza della parola è una potenza di due, questo campo di bit richiede bit di log 2 (word_width) per coprire l'intera parola. Cioè, una parola larga 32 bit richiede un campo a 5 bit nel codice operativo per queste operazioni. Se la parola fosse larga 33 bit, ne occorrerebbe 6 altrimenti non potrebbe coprire l'intera parola, ma ciò sarebbe anche il caso se la parola fosse larga 64 bit.

I bit in un codice operativo sono estremamente preziosi, quindi di solito non vogliono sprecarli. Quindi ha senso rendere la parola una potenza di 2 di larghezza.

Il motivo per cui i byte sono larghi 8 bit è che è la più piccola potenza di due che può contenere un carattere ASCII (che è 7 bit).


Questa non è la mia area di competenza, ma sembra una ragione valida per la potenza di due byte E dimensioni delle parole. Immagino che anche tu debba preoccuparti di meno di UB. Per uno spostamento a 33 bit richiederebbe un codice operativo a 6 bit, ma solo circa la metà dei possibili valori (0-32) ha un significato utile. Sei d'accordo?
Andreas,

il codice operativo deve essere più ampio del campo bit necessario per il conteggio dei turni. un byte non è altro che una parola di 8 bit. il motivo per cui l'hardware del computer tende ad usare dimensioni di parole che sono 8 o 16 o 32 o 64 bit (non è sempre il caso, il vecchio DSP56000 aveva parole a 24 bit) è a causa dei motivi che ho dato sopra e del motivo fornito da vartec : data una bitmap di parole impaccate e ti viene dato un numero di riga e colonna di un particolare pixel, si deve dividere il numero di colonna per la larghezza della parola per sapere a quale parola accedere per testare o cambiare il pixel. dividere per una potenza di 2 è facile.
Robert Bristow-Johnson,

Che cos'è una "bitmap di parole impacchettate"? HighColor soddisfa questa descrizione?
Andreas,

@ robertbristow-johnson: totale mancanza di immaginazione. Con byte a 9 bit, utilizzeremmo parole a 36 bit, 130 milioni di colori anziché 16 milioni di colori in RGBA, RGB666 invece di RGB555 o mostruosità RGB565 per colori di bassa qualità, e tutto andrebbe bene. E ASCII includerebbe 512 caratteri fino a Latin Extended.
gnasher729,

@Andreas, no, intendevo due "colori". totalmente bianco o totalmente nero.
Robert Bristow-Johnson,
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.