Qual è la differenza tra un kibibyte, un kilobit e un kilobyte?


45

Questa domanda mi ha fatto riflettere sulle differenze tra questi tre modi di misurare le dimensioni: un kibibyte , un kilobit e il kilobyte convenzionale.

Comprendo che queste misurazioni hanno usi diversi (la velocità di trasferimento dei dati viene misurata in bit / sec), ma non sono del tutto sicuro di poter distinguere Mb e MB e MiB.

Ecco un commento, riprodotto di seguito, tratto da questa risposta ( enfasi sulla mia ).

Il C64 ha 65536 byte di RAM. Per convenzione, la dimensione della memoria è specificata in kibiBytes , le velocità di trasferimento dei dati in kilobit e l'archiviazione di massa in qualunque cosa i produttori pensino ai byte attuali . I dischi rigidi utilizzano T, G, M e k sull'etichetta, Windows riporta le dimensioni in Ti , Gi , Mi e ki . E quei floppy da 1,44 MB? Quelli non sono né 1,44 MB né 1,44 MiB, sono 1,44 kilokibibyte. Sono 1440kiB o 1'474'560 byte. - Terzo


12
Ci sarà confusione per gli anni a venire. All'inizio dell'informatica, le persone hanno notato che era chiaramente molto più facile lavorare con fattori di 1024 anziché 1000 per i computer. Pertanto, per decenni, il prefisso SI standard "chilo" è stato (ed è ancora molto spesso utilizzato) per il non standard 1024, ed è diventato uno standard di fatto nell'informatica. Ad eccezione del fatto che alcune persone hanno comunque utilizzato l'IS 1000. Per risolvere il caos, "kibi" è ora ufficialmente definito come un fattore 1024 - ma è arrivato troppo tardi per una facile transizione. "chilo" sarà regolarmente utilizzato / abusato per 1024 fattori per un po 'di tempo.
Steve314,

Avrebbe aiutato l'adozione se non avessero scelto dei prefissi che suonano stupidi; persino un acronimo richiede che qualcuno "aspiri mentalmente" la parola. Semplicemente non userò mai "kibibyte", ecc.
tgm1024,

Risposte:


63
1 KiB (Kibibyte) = 1,024 B (Bytes) (2^10 Bytes)
1 kb  (Kilobit)  =   125 B (Bytes) (10^3 Bits ÷ (8 bits / byte) = 125 B)
1 kB  (Kilobyte) = 1,000 B (Bytes) (10^3 Bytes)

È lo stesso con qualsiasi prefisso SI; k(1x10 3 ), M(1x10 6 ), G(1x10 9 ), quindi, per estensione:

1 MiB (Mebibyte) = 1,048,576 B (Bytes) (2^20 Bytes)
1 Mb  (Megabit)  =   125,000 B (Bytes) (10^6 Bits ÷ (8 bits / byte) = 125,000 B)
1 MB  (Megabyte) = 1,000,000 B (Bytes) (10^6 Bytes)

Gli unici che sono un po 'diversi sono i prefissi binari IEC (kibi / mebi / gibi ecc.), Perché sono nella base 2, non nella base 10 (ad esempio tutti i numeri equivalgono a 2 qualcosa invece di 10 qualcosa ). Preferisco usare solo i prefissi SI perché trovo che sia molto più semplice. Inoltre, il Canada (il mio paese) utilizza il sistema metrico, quindi sono abituato, ad esempio 1kg = 1000g(o 1k anything = 1000 base things). Nessuno di questi è sbagliato o giusto; assicurati solo di sapere quale stai usando e a cosa equivale davvero.

Per placare i commentatori:

1 Byte (B) = 2 nibbles = 8 bits (b)

Ecco perché, se hai mai dato un'occhiata in un editor esadecimale, tutto è diviso in due caratteri esadecimali; ogni carattere esadecimale ha le dimensioni di un bocconcino e ce ne sono da due a un byte. Per esempio:

198 (decimal) = C6 (hex) = 11000110 (bits)

5
+1 Può essere utile menzionare che ci sono 8 bit in un byte.
paradroid

4
... e non dimenticare che un nybble è di quattro bit (o mezzo byte)!
Linker3000,

4
Potrebbe anche essere consapevole del fatto che la "b" minuscola viene talvolta utilizzata in modo errato per abbreviare "byte". Vedo che molti posti usano semplicemente "bit" nell'abbreviazione di MB per megabyte e Mbit per megabit e stare alla larga da "b".
James,

4
Il prefisso chilo è abbreviato k, non K.
garyjohn

1
@Redandwhite No, usano la base 10 per misurare la loro memoria, ma i nostri computer usano la base 2. Ciò spiega la discrepanza tra ciò che è stampato sulla scatola e ciò che appare nel computer. Ad esempio, 500GB (box) = 465.7GiB (computer)(e che è il modo che si ottiene).
squircle

9

Ci sono alcuni termini di base che sono semplici e facili da capire:

* A bit      (b)   is the smallest unit of data comprised of just {0,1}
* 1 nibble   (-)   = 4 bits (cutesy term with limited usage; mostly bitfields)
* 1 byte     (B)   = 8 bits (you could also say 2 nibbles, but that’s rare)

Per convertire tra bit e byte (con qualsiasi prefisso), basta multipli o dividere per otto; bello e semplice.

Ora, le cose diventano un po 'più complicate perché ci sono due sistemi di misurazione di grandi gruppi di dati: decimale e binario . Per anni, i programmatori e gli ingegneri di computer hanno usato gli stessi termini per entrambi, ma la confusione alla fine ha evocato alcuni tentativi di standardizzare un set adeguato di prefissi.

Ogni sistema utilizza un insieme simile di prefissi che possono essere applicati a bit o byte. Ciascun prefisso inizia lo stesso in entrambi i sistemi, ma quelli binari suonano come chiacchiere dopo.

Il sistema decimale è base-10 a cui la maggior parte delle persone è abituata e a proprio agio perché abbiamo 10 dita. Il sistema binario è base-2 a cui la maggior parte dei computer è abituata e che utilizza facilmente perché ha due stati di tensione.

Il sistema decimale è ovvio e facile da usare per la maggior parte delle persone (è abbastanza semplice da moltiplicarsi nelle nostre teste). Ogni prefisso aumenta di 1.000 (il motivo è una questione completamente diversa).

Il sistema binario è molto più difficile da usare per la maggior parte delle persone non informatiche, e persino i programmatori spesso non riescono a più numeri arbitrariamente grandi nelle loro teste. Tuttavia, si tratta semplicemente di essere multipli di due. Ogni prefisso aumenta di 1.024. Una "K" è 1.024 perché è la potenza più vicina di due alla "k" decimale di 1.000 (questo può essere vero a questo punto, ma la differenza aumenta rapidamente con ogni prefisso successivo).

I numeri sono gli stessi per bit e byte con lo stesso prefisso.

* Decimal:
* 1 kilobyte (kB)  = 1,000 B  = 1,000^1 B           1,000 B
* 1 megabyte (MB)  = 1,000 KB = 1,000^2 B =     1,000,000 B
* 1 gigabyte (GB)  = 1,000 MB = 1,000^3 B = 1,000,000,000 B

* 1 kilobit  (kb)  = 1,000 b  = 1,000^1 b           1,000 b
* 1 megabit  (Mb)  = 1,000 Kb = 1,000^2 b =     1,000,000 b
* 1 gigabit  (Gb)  = 1,000 Mb = 1,000^3 b = 1,000,000,000 b

* …and so on, just like with normal Metric units meters, liters, etc.
* each successive prefix is the previous one multiplied by 1,000



* Binary:
* 1 kibibyte (KiB) = 1,024 B  = 1,024^1 B           1,024 B
* 1 mebibyte (MiB) = 1,024 KB = 1,024^2 B =     1,048,576 B
* 1 gibibyte (GiB) = 1,024 MB = 1,024^3 B = 1,073,741,824 B

* 1 kibibit  (Kib) = 1,024 b  = 1,024^1 b =         1,024 b
* 1 mebibit  (Mib) = 1,024 Kb = 1,024^2 b =     1,048,576 b
* 1 gibibit  (Gib) = 1,024 Mb = 1,024^3 b = 1,073,741,824 b

* …and so on, using similar prefixes as Metric, but with funny, ebi’s and ibi’s
* each successive prefix is the previous one multiplied by 1,024

Si noti che la differenza tra il sistema decimale e binario inizia in piccolo (a 1 KB, sono solo 24 byte o con il 2,4% di distanza), ma aumenta con ogni livello (a 1G, sono> 70 MiB o il 6,9% di distanza).

Come regola generale, i dispositivi hardware utilizzano unità decimali (bit o byte) mentre il software utilizza binario (di solito byte).

Questo è il motivo per cui alcuni produttori, in particolare i mfg, preferiscono utilizzare le unità decimali, perché aumenta le dimensioni dell'unità, ma gli utenti si sentono frustrati quando trovano che ha meno di quanto si aspettassero quando vedono Windows et. al. riporta la dimensione in binario. Ad esempio, 500GB = 476GiB, quindi mentre l'unità è fatta per contenere 500GB ed etichettata come tale, Risorse del computer visualizza il 476GiB binario (ma come “476GB”), quindi gli utenti si chiedono dove siano andati gli altri 23GB. (I produttori di unità spesso aggiungono una nota a piè di pagina ai pacchetti in cui si afferma che la "dimensione formattata è inferiore" il che è fuorviante perché l'overhead del filesystem non è nulla rispetto alla differenza tra unità decimali e binarie.)

I dispositivi di rete utilizzano spesso bit anziché byte per motivi storici e agli ISP spesso piace fare pubblicità utilizzando i bit perché aumenta la velocità delle connessioni che offrono: 12 Mb anziché 1,5 Mb. Spesso combinano anche bit e byte e decimali e binari. Ad esempio, è possibile abbonarsi a ciò che l'ISP chiama una linea "12 Mbps", pensando che si stiano ottenendo 12 Mbps ma che in realtà ricevano appena 1,43 Mbps (12.000.000 / 8/1024/1010).


2
@endolith, non vero. Prima di tutto, ci sono davvero, o almeno erano in passato, alcuni produttori di unità che usano unità binarie. Secondo, hai perso il punto. Se lo volessero, potrebbero mettere 73.400.320 sull'unità che sarebbe effettivamente 70M (i) B anziché 66. Usano 70.000.000 perché è più economico usarlo e lo chiamano ancora "70MB". Sono semplici angoli di taglio e molti produttori lo fanno. Guarda il cibo; invece di 500G, metteranno 454G perché equivale a 1LB. Peggio ancora, invece di 454G, metteranno 450G e incolperanno il 4G mancante all'arrotondamento. Non è una cospirazione, è una riduzione dei costi.
Synetech,

1
Fornisci alcuni esempi di produttori di dischi rigidi che utilizzano unità binarie.
endolith

1
@endolith, questo non è un sito storico. Forse quando faccio le pulizie di primavera e scavo alcune vecchie unità, posterò una foto o qualcosa del genere. Altrimenti, puoi andare in un museo di storia del computer o shoppe per computer mamma e pop e trovare alcuni vecchi dischi rigidi se è così importante per te. Al giorno d'oggi, la maggior parte dei mfg usa di proposito etichette che fanno sembrare le cose più grandi. Come ho detto, potrebbero fare 73.400.320 byte per creare un'unità da 70 MB se lo desideravano, ma perché preoccuparsi quando possono risparmiare e ancora tecnicamente chiamarla 70 MB? Ancora una volta, non è una cospirazione, è un inganno di marketing comune.
Synetech,

2
Ho già guardato negli archivi di bitsavers e tutti gli esempi che trovo sono decimali. Questo mito che spinge i produttori a passare da binari a decimali ad un certo punto per ingannare i clienti è folle. Non sono stati scritti dai dipartimenti di marketing, ma dagli ingegneri che utilizzano le unità standard utilizzate dagli ingegneri. È logico e ragionevole chiamare un'unità IBM 3340 da 70.000.000 byte "70 MB". Questo è ciò che "mega" ha sempre significato ed è quello che gli utenti si aspettano. Chiamarlo "66 MB" in alcuni punti e "68.359 KB" in altri posti, come fa Microsoft Windows, è folle.
endolith

1
@endolith, nessuno ha detto che sono passati al decimale per ingannare, solo che li commercializzano in quel modo apposta anche se conoscono la confusione e potrebbero rendere l'unità 73.400.320 byte anziché solo 70.000.000 che non è un numero circolare nei computer. Per quanto riguarda la tua affermazione su "sempre" che ha significato questo, c'è già un filo qui su quando le unità binarie sono state utilizzate ed è stato molto tempo fa, sicuramente prima che i computer diventassero prodotti di consumo.
Synetech,

-4

Alcune delle risposte non sono esatte.

Facciamo prima alcune note:

Il prefisso "chilo" significa 1 000. Il prefisso "chilo" su qualsiasi cosa significa 1 000 di quell'elemento. Lo stesso vale per "mega" o milioni, "giga" o miliardi, "tera" o trilioni e così via.

Il motivo per cui 1 024 esiste invece di avere semplicemente 1 000 è a causa del modo in cui funziona l'aritmetica binaria. Binario, come suggerisce il nome, è un sistema di base 2 (ha 2 cifre: 0, 1). Può eseguire solo l'aritmetica con due cifre, in contrasto con il sistema di base 10 che usiamo su base giornaliera (0, 1, 2 ... 9), che ha dieci cifre.

Per arrivare al numero 1 000 ( chilo ) usando l'aritmetica binaria, è necessario eseguire un calcolo in virgola mobile. Ciò significa che è necessario eseguire una cifra binaria per ogni operazione fino al raggiungimento di 1 000. Nel sistema base 10, 1 000 = 10 3 (aumenti sempre 10 a una potenza in base 10), un calcolo molto semplice e veloce per un computer da eseguire senza "residui", ma nel sistema base 2, è non è possibile aumentare 2 (si aumenta sempre 2 a una potenza in base 2) a qualsiasi numero intero positivo per ottenere 1 000. È necessario utilizzare un'operazione in virgola mobile o una lunga aggiunta, che richiede più tempo rispetto al calcolo del numero intero 2 10 = 1024.

Potresti aver notato che 2 10 = 1 024 è allettante vicino a 1 000 e 1 024 a 1 cifra significativa è 1 000 (un'approssimazione molto buona), e indietro quando la velocità della CPU era lenta come un vecchio cane e la memoria era molto limitata , questa era un'approssimazione abbastanza decente e molto facile da lavorare, per non parlare veloce da eseguire.

È per questo motivo termini con "chilo", "mega", "giga", ecc., Prefissi bloccati con cifre non esatte (1 024, 2 048, 4 096 e così via). Non sono mai stati pensati per essere numeri esatti, erano approssimazioni binarie di numeri base 10. Nacquero semplicemente come parole gergali che le persone "tecnologiche" usavano.

Per rendere le cose ancora più complicate, JEDEC ha creato i propri standard per le unità utilizzate nei circuiti di memoria dei semiconduttori. Confrontiamo alcune delle unità JEDEC con le unità SI (standard internazionali):

Kb = Kilobit (JEDEC, 1 024 bit. Nota maiuscola 'K' e minuscola 'b')
kB = kiloBit (SI, 1 000 bit. Nota la minuscola 'k' e maiuscola 'B')

b = bit (JEDEC, notare la 'b' minuscola)
b = ??? (SI non definisce la parola "bit", quindi il suo utilizzo potrebbe essere arbitrario)

B = byte (JEDEC, 8 bit. Notare la 'B' maiuscola)
B = ???? (SI non definisce la parola "byte" e "B" è usato per "Bel" [come in DeciBel])

KB = kilobyte (JEDEC, 1 024 byte. Nota le maiuscole 'K' e 'B')
kb = kilobyte (SI, 1 000 byte. Nota l'uso delle lettere minuscole 'k' e minuscole 'B')

Il punto è che luoghi diversi usano prefissi diversi con definizioni diverse. Non esiste una regola rigida e veloce su quale si dovrebbe usare, ma essere coerenti con quello che si usa.

A causa del voto negativo, permettetemi di chiarire perché non è possibile effettuare 1 000 in binario aumentandolo a qualsiasi numero intero positivo.

Sistema binario:

+----------------------------------------------------------------------------------+
| 1 024ths | 512ths | 256ths | 128ths | 64ths | 32nds | 16ths | 8ths | 4s | 2s | 0 |
+-----------------------------------------------------------------------------------

Si noti che nel sistema binario, le colonne raddoppiano ogni volta. Ciò è in contrasto con il sistema di base 10 che aumenta di 10 ogni volta:

+--------------------------------------------------------------------------+
| 1 000 000ths | 100 000ths | 10 000ths | 1 000ths | 100ths | 10s | 1s | 0 |
+--------------------------------------------------------------------------+

I primi 10 poteri in binario (base 2) sono:

2 0 = 1
2 1 = 2
2 2 = 4
2 3 = 8
2 4 = 16
2 5 = 32
2 6 = 64
2 7 = 128
2 8 = 256
2 9 = 512
2 10 = 1 024

Come puoi vedere, non è possibile elevare il binario 2 a nessun numero intero positivo per raggiungere 1 000.


3
Credo che tu abbia sbagliato quando affermi che il numero 1000 ha bisogno dell'aritmetica in virgola mobile. Puoi rappresentare qualsiasi numero naturale usando qualsiasi tipo di sistema di numerazione. In realtà, l'equivalente binario di 1000 è 1111101000 .
Doktoro Reichard,

Doktoro, ti preghiamo di ricordare che stiamo lavorando nel sistema binario, o base 2, quindi sei davvero colui che non è corretto. Ecco i primi 10 poteri di 2 in binario (base 2): 2 ^ 0 = 1. 2 ^ 1 = 2. 2 ^ 3 = 4. 2 ^ 4 = 8. 2 ^ 5 = 16. 2 ^ 6 = 64 . 2 ^ 7 = 128. 2 ^ 8 = 256. 2 ^ 9 = 512. 2 ^ 10 = 1024. Nota che la risposta è esponenziale, raddoppia ogni volta che aumenti l'esponente di 1. Quindi vedi, non lo è possibile alzare un binario 2 (un BINARY 2 ... non un base dieci 2) a qualsiasi numero intero positivo per fare 1 000. Apprezzo lo stesso il down down.
user3005790,

Questo non spiega questo diverso tra un bit e un byte. In realtà esiste una "regola veloce" 1 Kb è mille bit 1KB è mille byte. C'è un'enorme differenza. 8 Kb è 1 KB.
Ramhound,

3
Sebbene questa affermazione sia corretta, non è ancora necessario eseguire alcun tipo di aritmetica in virgola mobile. Comprendi i poteri di 2, quindi puoi anche capire che 1111101000 = 2 ^ 9 + 2 ^ 8 + 2 ^ 7 + 2 ^ 6 + 2 ^ 5 + 2 ^ 3 = 1000.
Doktoro Reichard

1
Non credo che "Non sono mai stati pensati per essere numeri esatti, erano approssimazioni binarie di numeri di base 10" è vero; Penso che sia solo un risultato dell'hardware che era (è) limitato alla memorizzazione di uno e zero e all'indirizzamento hardware mediante registri binari. Entrambi essendo base 2; non mi riferisco affatto ai calcoli approssimativi della base 10. Inoltre, non riesco a vedere il punto che stai facendo riguardo ai calcoli. Non è come se l'output del computer mostrasse 1024 dove effettivamente intendeva mostrare 1000, o mostrare 1000 quando internamente sarebbe 1024. A quali calcoli ti riferisci?
Arjan,
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.