Na época em que C estava sendo escrito, a linguagem assembly MACRO-11 do PDP-11 tinha:
MOV #'A, R0 // 8-bit character encoding for 'A' into 16 bit register
Esse tipo de coisa é bastante comum na linguagem assembly - os 8 bits baixos manterão o código do caractere, outros bits zerados para 0. O PDP-11 até tinha:
MOV #"AB, R0 // 16-bit character encoding for 'A' (low byte) and 'B'
Isso forneceu uma maneira conveniente de carregar dois caracteres nos bytes inferior e superior do registro de 16 bits. Você pode então escrevê-los em outro lugar, atualizando alguns dados textuais ou memória da tela.
Então, a ideia de personagens sendo promovidos para registrar tamanho é bastante normal e desejável. Mas, digamos que você precise obter 'A' em um registro não como parte do código de operação embutido em código, mas de algum lugar na memória principal contendo:
address: value
20: 'X'
21: 'A'
22: 'A'
23: 'X'
24: 0
25: 'A'
26: 'A'
27: 0
28: 'A'
Se você quiser ler apenas um 'A' desta memória principal em um registro, qual você lerá?
Algumas CPUs podem suportar apenas a leitura direta de um valor de 16 bits em um registrador de 16 bits, o que significaria que uma leitura em 20 ou 22 exigiria que os bits de 'X' fossem apagados, dependendo do endianness de um ou outro CPU precisaria mudar para o byte de ordem inferior.
Algumas CPUs podem exigir uma leitura alinhada à memória, o que significa que o endereço mais baixo envolvido deve ser um múltiplo do tamanho dos dados: você pode conseguir ler nos endereços 24 e 25, mas não 27 e 28.
Portanto, um compilador que gere código para obter um 'A' no registro pode preferir desperdiçar um pouco de memória extra e codificar o valor como 0 'A' ou 'A' 0 - dependendo do endianness, e também garantindo que ele esteja alinhado corretamente ( ou seja, não em um endereço de memória ímpar).
Meu palpite é que o C simplesmente carregou esse nível de comportamento centrado na CPU, pensando em constantes de caractere ocupando tamanhos de registro de memória, sustentando a avaliação comum de C como um "montador de alto nível".
(Consulte 6.3.3 na página 6-25 de http://www.dmv.net/dec/pdf/macro.pdf )