hrcerq
(usa Outra)
Enviado em 12/10/2018 - 23:28h
SamL escreveu:
Se não me engano, por padrão um char tem um byte tanto em 32 bits quanto em 64 e armazenar 4 valores de um byte num int é bem chatinho.
Sim, o valor de 1 char corresponde a 1 byte. Mas para o CPF você precisaria de 15 bytes. Com um int, 4 bytes bastariam para armazenar a mesma informação (claro, considerando que o primeiro dígito não seja 0).
[...] Pra isso vai ter que usar deslocamento de bits do inteiro, fora que cada byte só armazena até o valor 255 (unsigned char) sendo que no CPF existem valores acima de 255 pra cada seção entre os pontos. Se quiser algo mais enxuto vai ter que usar vetor de todo jeito, no mínimo do tipo unsigned short int (2 bytes). Se usar string ele pode tratar melhor cada número, além de ser bem mais simples de se trabalhar apesar de não ser lá tão elegante.
Não vamos complicar o que não precisa ser complicado. Operações de bit a bit não são necessárias aqui e nem fariam sentido nesse caso.
A quantidade de dígitos entre cada ponto é irrelevante. O que é relevante é o número do CPF como um todo. Então eu poderia por exemplo criar a variável e atribuir o valor sem delimitadores. Por exemplo:
int cpf;
cpf = 11122233344;
O problema desta abordagem é que se o CPF começa com 0, o valor inteiro suprime o zero à esquerda. Assim, quando eu ler o valor da variável terei o valor incorreto, a menos que na leitura eu aplique um preenchimento com zeros, por exemplo:
printf("CPF: %011d\n",cpf);
---
Atenciosamente,
Hugo Cerqueira
Devuan -
https://devuan.org/