Quantos bits ou bytes existem por "caractere"?
Quantos bits ou bytes existem por "caractere"?
Respostas:
Depende de qual é o caractere e em qual codificação ele está:
Um caractere ASCII na codificação ASCII de 8 bits tem 8 bits (1 byte), embora possa caber em 7 bits.
Um caractere ISO-8895-1 na codificação ISO-8859-1 tem 8 bits (1 byte).
Um caractere Unicode na codificação UTF-8 tem entre 8 bits (1 byte) e 32 bits (4 bytes).
Um caractere Unicode na codificação UTF-16 tem entre 16 (2 bytes) e 32 bits (4 bytes), embora a maioria dos caracteres comuns possua 16 bits. Esta é a codificação usada pelo Windows internamente.
Um caractere Unicode na codificação UTF-32 é sempre de 32 bits (4 bytes).
Um caractere ASCII em UTF-8 tem 8 bits (1 byte) e em UTF-16 - 16 bits.
Os caracteres adicionais (não ASCII) em ISO-8895-1 (0xA0-0xFF) levariam 16 bits em UTF-8 e UTF-16.
Isso significaria que existem entre 0,03125 e 0,125 caracteres em um bit.
Existem 8 bits em um byte (normalmente falando no Windows).
No entanto, se você estiver lidando com caracteres, dependerá do conjunto de caracteres / codificação. O caractere Unicode pode ter 2 ou 4 bytes, de modo que seria 16 ou 32 bits, enquanto o Windows-1252, às vezes chamado incorretamente de ANSI, tem apenas 1 bytes, portanto, 8 bits.
Na versão asiática do Windows e em algumas outras, todo o sistema é executado em byte duplo, portanto, um caractere tem 16 bits.
EDITADO
De acordo com o comentário de Matteo, todas as versões contemporâneas do Windows usam 16 bits internamente por caractere.
wchar_t
), não apenas os asiáticos, e o mesmo deve acontecer com todos os aplicativos mais recentes. (No Linux, em vez disso, é uma história completamente diferente, já que normalmente UTF-8 é usado em todo o sistema)
char
, enquanto as strings Unicode são armazenadas usando o wchar_t
tipo. A propósito, quando o NT foi iniciado, um wchar_t
era o suficiente para evitar pares substitutos, mas agora que é UTF-16, até mesmo wchar_t
strings podem ter caracteres de comprimento variável, portanto, no Windows, um caractere Unicode em pode levar de 2 a 4 bytes (1 ou 2 wchar_t
)
:)