Qual é a diferença entre um kibibyte, um kilobit e um kilobyte?

45

Essa pergunta me fez pensar sobre as diferenças entre essas três maneiras de medir o tamanho: um kibibyte , um kilobit e o kilobyte convencional.

Entendo que essas medidas têm usos diferentes (a taxa de transferência de dados é medida em bits / s), mas não tenho muita certeza se posso dizer a diferença entre Mb e MB e MiB.

Aqui está um comentário, reproduzido abaixo, retirado desta resposta ( grifo meu ).

O C64 possui 65536 bytes de RAM. Por convenção, o tamanho da memória é especificado no kibibytes , taxas de transferência de dados em kilobits , e armazenamento em massa em qualquer-the-fabricantes-pensar-de-agora- Bytes . Os discos rígidos usam T, G, M ek no rótulo, o Windows relata o tamanho em Ti , Gi , Mi e ki . E aqueles disquetes de 1,44 MB? Esses não são 1.44MB nem 1.44MiB, são 1.44 kilokibibytes. Isso significa 1440kiB ou 1'474'560 bytes. - terceiro

Vermelho e branco
fonte
12
Haverá confusão nos próximos anos. Nos primeiros dias da computação, as pessoas descobriram que era claramente muito mais fácil trabalhar com fatores de 1024 do que 1000 para computadores. Portanto, por décadas, o prefixo padrão do SI "kilo" foi (e ainda é frequentemente usado) para o não-padrão 1024, e tornou-se um padrão de fato na computação. Exceto que algumas pessoas ainda usavam o SI 1000 de qualquer maneira. Para resolver a bagunça, "kibi" agora é oficialmente definido como um fator 1024 - mas chegou tarde demais para uma transição fácil. "kilo" será usado / abusado regularmente por 1024 fatores por um tempo ainda.
Steve314
Ajudaria a adoção se eles não tivessem escolhido prefixos que parecem estúpidos; mesmo um acrônimo exige que alguém "aspire mentalmente" a palavra. Eu simplesmente nunca usarei "kibibyte" etc.
tgm1024

Respostas:

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)

É da mesma maneira com qualquer prefixo de SI; k(1x10 3 ), M(1x10 6 ), G(1x10 9 ), portanto, por extensão:

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)

Os únicos que são um pouco diferentes são a IEC Binary prefixos (kibi / mebi / gibi etc.), porque eles estão na base 2, não base 10 (por exemplo, todos os números iguais 2 alguma coisa em vez de 10 algo ). Prefiro usar apenas os prefixos do SI, porque acho que é muito mais fácil. Além disso, o Canadá (meu país) usa o sistema métrico, por isso estou acostumado, por exemplo 1kg = 1000g(ou 1k anything = 1000 base things). Nada disso está errado ou certo; apenas saiba qual você está usando e o que realmente significa.

Para apaziguar os comentadores:

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

É por isso que, se você já deu uma olhada em um editor hexadecimal, tudo é dividido em dois caracteres hexadecimais; cada caractere hexadecimal é do tamanho de uma mordidela e há dois em um byte. Por exemplo:

198 (decimal) = C6 (hex) = 11000110 (bits)
esquilo
fonte
5
+1 mencionar que há 8 bits em um byte pode ser útil.
Paradroid 23/05
4
... e não esqueça que um nybble tem quatro bits (ou meio byte)!
Linker3000 #
4
Também pode estar ciente de que o "b" minúsculo às vezes é usado incorretamente para abreviar "bytes". Eu vejo muitos lugares que usam "bit" na abreviação, como MB para megabyte e Mbit para megabit e ficam longe de "b".
James
4
O prefixo kilo é abreviado k, e não K. #
31711 garyjohn
1
@Redandwhite Não, eles usam a base 10 para medir seu armazenamento, mas nossos computadores usam a base 2. Isso explica a discrepância entre o que está impresso na caixa e o que aparece no computador. Por exemplo, 500GB (box) = 465.7GiB (computer)(e que é a forma como eles te).
squircle 23/05
9

Existem alguns termos básicos simples e fáceis de entender:

* 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)

Para converter entre bits e bytes (com qualquer prefixo), apenas múltiplos ou divida por oito; agradável e simples.

Agora, as coisas ficam um pouco mais complicadas porque existem dois sistemas para medir grandes grupos de dados: decimal e binário . Durante anos, programadores e engenheiros de computador usaram os mesmos termos para ambos, mas a confusão acabou evocando algumas tentativas de padronizar um conjunto adequado de prefixos.

Cada sistema usa um conjunto semelhante de prefixos que podem ser aplicados a bits ou bytes. Cada prefixo começa da mesma forma em ambos os sistemas, mas os binários soam como conversa de bebê depois disso.

O sistema decimal é a base 10, com o qual a maioria das pessoas está acostumada e confortável, porque temos 10 dedos. O sistema binário é de base 2, com o qual a maioria dos computadores está acostumada e confortável, porque possui dois estados de tensão.

O sistema decimal é óbvio e fácil de usar para a maioria das pessoas (é simples o suficiente para se multiplicar em nossas cabeças). Cada prefixo aumenta em 1.000 (a razão disso é uma questão totalmente diferente).

O sistema binário é muito mais difícil de ser usado pela maioria das pessoas que não são computadores, e mesmo os programadores geralmente não conseguem múltiplos números arbitrariamente grandes em suas cabeças. No entanto, é uma simples questão de múltiplos de dois. Cada prefixo aumenta em 1.024. Um "K" é 1.024 porque essa é a potência mais próxima de dois do "k" decimal de 1.000 (isso pode ser verdade neste momento, mas a diferença aumenta rapidamente a cada prefixo sucessivo).

Os números são os mesmos para bits e bytes que têm o mesmo prefixo.

* 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

Observe que a diferença entre o sistema decimal e o binário começa pequeno (em 1K, eles têm apenas 24 bytes ou 2,4% de diferença), mas cresce a cada nível (em 1G, eles são> 70MiB ou 6,9% de diferença).

Como regra geral, os dispositivos de hardware usam unidades decimais (bits ou bytes), enquanto o software usa binário (geralmente bytes).

Esse é o motivo pelo qual alguns fabricantes, principalmente os mfgs, gostam de usar unidades decimais, porque isso aumenta o tamanho da unidade, mas os usuários ficam frustrados ao descobrir que têm menos do que esperavam ao ver o Windows et. al. relate o tamanho em binário. Por exemplo, 500 GB = 476GiB, portanto, enquanto a unidade é feita para conter 500 GB e rotulada como tal, Meu Computador exibe o 476GiB binário (mas como “476GB”), para que os usuários se perguntem para onde foram os outros 23 GB. (Os fabricantes de unidades geralmente adicionam uma nota de rodapé aos pacotes informando que o "tamanho formatado é menor", o que é enganoso, porque a sobrecarga do sistema de arquivos não é nada comparada à diferença entre unidades decimais e binárias.)

Os dispositivos de rede geralmente usam bits em vez de bytes por razões históricas, e os ISPs geralmente gostam de anunciar usando bits porque aumentam a velocidade das conexões que eles oferecem: 12Mibps em vez de apenas 1,5 Mbps. Eles geralmente combinam e combinam bits e bytes, decimal e binário. Por exemplo, você pode assinar o que o ISP chama de linha de "12MBps", pensando que você está recebendo 12MiBps, mas na verdade apenas recebe 1,43MiBps (12.000.000 / 8/1024/1024).

Synetech
fonte
2
@ endolith, não é verdade. Antes de tudo, existem de fato, ou pelo menos existiam no passado, alguns fabricantes de unidades que usam unidades binárias. Segundo, você perdeu o ponto. Se quisessem, poderiam colocar 73.400.320 na unidade, que na verdade seriam 70M (i) B em vez de 66. Eles usam 70.000.000 porque é mais barato usá-lo e ainda o chamam de "70MB". É simples cortar cantos e muitos fabricantes fazem isso. Olhe para comida; em vez de 500G, eles colocam 454G porque é igual a 1LB. Pior, em vez de 454G, eles colocarão 450G e culparão a falta de 4G no arredondamento. Não é uma conspiração, é uma redução de custos.
Synetech
1
Forneça alguns exemplos de fabricantes de discos rígidos usando unidades binárias.
endolith
1
@ endolith, este não é um site de histórico. Talvez quando eu fizer uma limpeza de primavera e desenterrar algumas unidades antigas, eu postarei uma foto ou algo assim. Caso contrário, você pode ir a um museu de história da computação ou a uma loja de informática para mães e filhos e encontrar alguns discos rígidos antigos, se isso for importante para você. Hoje em dia, a maioria dos MFGs usa propositalmente etiquetas que fazem as coisas parecerem maiores. Como eu disse, eles poderiam criar 73.400.320 bytes para criar uma unidade de 70 MB, se quisessem, mas por que se preocupar quando podem pagar menos e ainda chamar tecnicamente de 70 MB? Novamente, não é uma conspiração, é uma fraude comum de marketing.
Synetech
2
Eu já procurei nos arquivos dos bitsavers e todos os exemplos que encontro são decimais. Esse mito que leva os fabricantes a mudar de binário para decimal em algum momento para enganar os clientes é maluco. Eles não foram escritos pelos departamentos de marketing, mas pelos engenheiros que usam as unidades padrão usadas pelos engenheiros. É lógico e sensato chamar uma unidade IBM 3340 de 70.000.000 de bytes "70 MB". Isso é o que '' mega- '' sempre significou e é o que os usuários esperariam. Chamar "66 MB" em alguns lugares e "68.359 KB" em outros lugares, como o Microsoft Windows, é insano.
endolith
1
@ endolith, ninguém disse que trocou o decimal para enganar, apenas que os comercializa dessa maneira de propósito, mesmo sabendo da confusão e podendo gerar 73.400.320 bytes de unidade em vez de apenas 70.000.000, o que não é um número redondo em computadores. Quanto à sua afirmação de que "sempre" significava isso, já existe um tópico sobre quando as unidades binárias entraram em uso e isso foi há muito tempo, certamente antes dos computadores se tornarem produtos de consumo.
Synetech
-4

Algumas das respostas não são exatas.

Vamos primeiro fazer algumas anotações:

O prefixo "quilo" significa 1 000. Prefixar "quilo" para qualquer coisa significa 1 000 desse item. O mesmo vale para "mega" ou milhão, "giga" ou bilhão, "tera" ou trilhão e assim por diante.

A razão de 1 024 existir, em vez de simplesmente ter 1 000, deve-se ao modo como a aritmética binária funciona. Binário, como o próprio nome sugere, é um sistema de base 2 (possui 2 dígitos: 0, 1). Ele só pode executar aritmética com dois dígitos, em contraste com o sistema base 10 que usamos diariamente (0, 1, 2 ... 9), que possui dez dígitos.

Para chegar ao número 1 000 ( quilo ) usando aritmética binária, é necessário executar um cálculo de ponto flutuante. Isso significa que um dígito binário deve ser realizado a cada operação até que 1.000 sejam alcançados. No sistema base 10, 1 000 = 10 3 (você sempre aumenta 10 para uma potência na base 10), um cálculo muito fácil e rápido para um computador executar sem "restos", mas no sistema base 2, é não é possível aumentar 2 (você sempre aumenta 2 para uma potência na base 2) para qualquer número inteiro positivo para obter 1 000. Uma operação de ponto flutuante ou adição longa deve ser usada, e isso leva mais tempo para ser executado do que o cálculo do número inteiro 2 10 = 1024.

Você pode ter notado que 2 10 = 1 024 é tentadoramente próximo de 1 000 e 1 024 a 1 número significativo é 1 000 (uma aproximação muito boa), e quando a velocidade da CPU era lenta como um cachorro velho e a memória era muito limitada , essa foi uma aproximação bastante decente e muito fácil de trabalhar, sem mencionar a execução rápida.

É por essa razão que termos com os prefixos "kilo", "mega", "giga" etc. etc. ficam com valores não exatos (1 024, 2 048, 4 096 e assim por diante). Eles nunca foram feitos para serem números exatos, eram aproximações binárias dos números da base 10. Eles simplesmente surgiram como palavras de jargão que as pessoas "tecnológicas" usavam.

Para tornar as coisas ainda mais complicadas, a JEDEC criou seus próprios padrões para unidades usadas em circuitos de memória semicondutores. Vamos comparar algumas das unidades JEDEC com as unidades SI (padrão internacional):

Kb = Kilobit (JEDEC, 1 024 bits. Observe a letra maiúscula 'K' e a letra minúscula 'b')
kB = kiloBit (SI, 1 000 bits. Observe a letra minúscula 'k' e a letra maiúscula 'B')

b = bit (JEDEC, observe a letra minúscula 'b')
b = ??? (SI não define a palavra 'bit', portanto, seu uso pode ser arbitrário)

B = byte (JEDEC, 8 bits. Observe a maiúscula 'B')
B = ???? (SI não define a palavra "byte" e "B" é usado para "Bel" [como no DeciBel])

KB = kilobyte (JEDEC, 1 024 bytes. Observe as letras maiúsculas 'K' e 'B')
kb = kilobyte (SI, 1 000 bytes. Observe o uso das letras minúsculas 'k' e 'B')

O ponto é que lugares diferentes usam prefixos diferentes com definições diferentes. Não existe uma regra rígida e rápida sobre qual deles você deve usar, mas seja consistente com o que você usa.

Devido à baixa votação, permita-me esclarecer por que você não pode fazer 1 000 em binário aumentando-o para qualquer número inteiro positivo.

Sistema Binário:

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

Observe que no sistema binário, as colunas duplicam toda vez. Isso contrasta com o sistema base 10, que aumenta em 10 a cada vez:

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

Os 10 primeiros poderes em binário (base 2) são:

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

Como você pode ver, não é possível aumentar o binário 2 para qualquer número inteiro positivo para atingir 1 000.

user3005790
fonte
3
Acredito que você esteja incorreto ao afirmar que o número 1000 precisa de aritmética de ponto flutuante. Você pode representar qualquer número natural usando qualquer tipo de sistema de numeração. Na verdade, o equivalente binário de 1000 é 1111101000 .
Doktoro Reichard
Doktoro, lembre-se de que estamos trabalhando no sistema binário, ou na base 2, então você é de fato aquele que está incorreto. Aqui estão as 10 primeiras potências de 2 em binário (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. Observe que a resposta é exponencial, ela dobra toda vez que você aumenta o expoente em 1. Portanto, veja você, não é. possível elevar um binário 2 (um BINÁRIO 2 ... não uma base dez 2) para qualquer número inteiro positivo para gerar 1 000. Agradeço o voto negativo da mesma forma.
User3005790
Isso não explica a diferença entre um bit e um byte. Na verdade, existe uma "regra rígida" 1 Kb é de mil bits 1KB é de mil bytes. Há uma enorme diferença. 8 Kb é 1 KB.
Ramhound
3
Embora essa declaração esteja correta, você ainda não precisa executar nenhum tipo de aritmética de ponto flutuante. Você entende os poderes de 2, então também pode entender que 1111101000 = 2 ^ 9 + 2 ^ 8 + 2 ^ 7 + 2 ^ 6 + 2 ^ 5 + 2 ^ 3 = 1000.
Doktoro Reichard
1
Eu não acredito que "Eles nunca foram feitos para serem números exatos, eram aproximações binárias dos números da base 10" é verdade; Eu acho que é apenas o resultado do hardware que foi (é) limitado ao armazenamento de zeros e zeros e ao endereçamento de hardware usando registradores binários. Ambos sendo a base 2; não está relacionado à aproximação dos cálculos da base 10, eu acho. Além disso, não consigo entender o que você está fazendo sobre cálculos. Não é como se a saída do computador mostrasse 1024 onde realmente pretendia mostrar 1000, ou mostrasse 1000 quando internamente seria 1024. A que cálculos você está se referindo?
Arjan