Os dados são armazenados em unidades de bytes - o número 1 ocuparia, no mínimo, 8 bits: 00000001
e sempre inicia e termina em um limite de bytes. Quando a CPU acessa dados na RAM, ela endereça todo o byte, não os bits individuais.
O rótulo "64-bit" significa apenas que todos os endereços de memória têm 4 bytes de comprimento (e naturalmente que a CPU tem instruções para trabalhar com números tão grandes).
Mas isso não muda como os programas armazenam todos os outros tipos de dados. Para todo o resto, o programa (ou seja, seu autor) pode escolher o tamanho preferido, desde que seja um número exato de bytes. Por exemplo, em C, uma variável declarada como short
ou uint16_t
será 16 bits, ou seja, 2 bytes. Os tamanhos usuais são 8, 16, 32, 64 bits (isto é, 1, 2, 4 ou 8 bytes), já que foi com isso que as CPUs trabalharam.
(É claro, programas podem armazenar dados da maneira que quiserem - muitos formatos de arquivos em disco fazem pacotes em 3 bytes ou 5 bytes ou qualquer outra coisa - mas é mais complicado trabalhar com eles. )
Para continuar com sua pergunta, como "o sistema" distingue entre um único número de 32 bits e, por exemplo, dois de 16 bits - a resposta é que não precisa . É tudo decidido quando o programa é escrito e / ou compilado, então as instruções resultantes da CPU funcionam diretamente com os tamanhos específicos.
(Na verdade, é comum um programa interpretar os mesmos dados de maneiras diferentes - por exemplo, mesmo que o texto possa ser armazenado como uma série de caracteres de 1 byte, funções como strpos () usam truques de aceleração que dependem da interpretação do exatamente os mesmos dados que uma série de números de 4 bytes ou mesmo 8 bytes.)