Como desenvolvedor web, tenho muito pouco conhecimento de dados binários.
Se eu pegar a frase "Olá, mundo.", Convertê-la em binário e armazená-la como binária em um banco de dados SQL, parece que os 1s e 0s ocupariam mais espaço do que as letras. Parece-me que usar letras seria como usar compressão, onde um símbolo significa múltiplo.
Mas é assim mesmo que funciona?
O armazenamento de dados de texto sem formatação ocupa menos espaço que o armazenamento da mensagem equivalente em binário?
Respostas:
Texto simples é binário.
Quando você escreve
H
um disco rígido, o cabeçote de gravação não grava duas linhas verticais e uma horizontal no prato, codifica magneticamente os bits01001000
1 no prato.A partir daí, deve ser óbvio que o armazenamento de dados de texto sem formatação ocupa exatamente a mesma quantidade de espaço que o armazenamento de dados binários.
Mas o texto simples é apenas um formato binário em 2
O texto sem formatação pode ser transformado reversivelmente em outros formatos binários. Uma transformação comum é a compactação, que geralmente resulta em uma representação mais compacta, significando menos bits usados para representar a mesma informação.
Dependendo do que você estiver usando o texto sem formatação para representar, você poderá usar diferentes formatos binários para representar as mesmas informações. Isso pode usar mais espaço, pode usar menos.
Por exemplo, os números
5
e1234567
podem ser representados em texto sem formatação usando caracteres de dígito, resultando nessas seqüências de bits no disco 3 :Como alternativa, você pode usar o complemento de dois bits de 32 bits :
Qual é uma representação menos compacta de
5
, mas uma representação mais compacta de1234567
.E há um número literalmente infinito de outras representações que teriam níveis variados de compacidade e flexibilidade, embora, na prática, muito menos do que muitas representações sejam realmente usadas.
1 Assumindo UTF-8. A sequência exata de bits para um caractere depende da codificação específica que você está usando.
2 Ou, na verdade, vários formatos, dadas as várias codificações .
3 Se você está se perguntando quais são esses oito zeros nas extremidades, bem, precisa de uma maneira de saber quanto tempo os dados têm. As opções basicamente se resumem a um marcador (usei isso, via um byte nulo), espaço dedicado ao armazenamento do comprimento (Pascal usou um byte para armazenar o comprimento de uma string) ou um tamanho fixo (usado no complemento subsequente dos dois) exemplo).
fonte
Acho isso uma coisa muito divertida de se pensar. Binário não é 1s e 0s na maneira como você fala sobre isso.
Imagine que existe uma quantidade, posso lhe dizer qual é a quantidade de muitas maneiras diferentes:
Nine
em inglêsNeuf
em francês9
em algarismos arábicosIX
em algarismos romanos1001
em binário com algarismos arábicoson off off on
em binário com on / offhigh low low high
em binário representado com tensões ou alavancas ou níveis de água ou carga elétrica ... ou palavras em inglês 'alto' e 'baixo'Todos eles representam a mesma coisa. O ponto aqui é que o binário não é 1s e 0s, é apenas uma maneira de representar um valor.
Quando você fala sobre converter um H em binário, provavelmente imagina ver 10101010 na tela - mas isso não é "binário", é um dígito para cada bit binário.
Sim, se você convertesse
H
para "binário", como as pessoas normalmente falam sobre isso, e representasse isso em dígitos árabes e o armazenasse, seria necessário mais espaço da mesma maneira que a conversãoH
paraaitch
ocupa mais espaço.Mas você pode ver que o binário é uma maneira de representar uma quantidade, bem com essa lógica dizendo "se eu convertesse H em binário e o representasse,
high low high low high low high low
levaria 35 caracteres! Isso é ainda mais do que10101010
! Mas esses dois são 'binários' .. então, como é um maior que o outro?O outro lado disso é que saber como
H
é armazenado por um computador, e ver queH
é em si apenas uma maneira de representar uma quantidade - a mesma quantidade72
,01001000
ouseventy two
ou código de caracteres ASCIIH
. Qual é a resposta da 8bittree de que o texto simples é binário, mas este sou eu tentando mostrar o que isso significa .Então você tem um pouco de padrão em um computador
01001000
e o que isso significa? Qualquer coisa - pode ser falada como um número, como parte de um arquivo zip, como um personagem, depende de qual foi a intenção da pessoa que o criou. Se você sabe que é um texto sem formatação, veio de uma codificação de caracteresH
->01001000
e você procura o contrário na tabela de codificação de caracteres - ASCII, UTF-8, shift-jis, etc. e encontra a fonte correta personagem e sai vem umH
ou o que quer. Ou sai o caractere errado se você usar uma pesquisa de codificação diferente da pessoa que o criou. Este é o link de @Eric Lippert.Mas enquanto eu escrevo isso, e como você pensa sobre isso,
H
é um byte e01001000
tem 8 bytes, sim, é mais espaço. E sim, é (uma representação de) binário. Mas está em um nível de abstração mais alto do que o computador está usando - binário exibido em caracteres ASCII, onde cada caractere é representado nos bastidores com um padrão de bits binários, cada um do tamanho de umH
único.fonte
Não nunca.
Seu computador já armazena os dados de texto sem formatação na representação binária equivalente. Armazenar algo como texto sem formatação versus binário apenas indica como o computador deve interpretar esse fluxo binário idêntico .
Isso é meio verdade. Um caractere representará mais de um bit. O problema é que são coisas de tamanhos diferentes. Leva apenas um bit para armazenar 1 ou 0, mas 8 bits (ou mais) para armazenar um caractere de texto sem formatação. Você não ganha nada usando caracteres.
Se alguma coisa , você pode comprimir as coisas de outra maneira. Afinal, 8 bits são 256 possíveis valores diferentes, mas o texto simples geralmente é limitado a letras, números e alguns caracteres de pontuação. Não precisa de tantos bits quanto necessário.
fonte