Bom Dia! Desculpem minha ignorancia, mas estou com uma dúvida que é a seguinte:
byte - Tamanho de 8 bits com sinal. Valores de ? 128 a + 127.
short - Tamanho de 16 bits com sinal. Valores de ? 32.768 a + 32.767.
int - Tamanho de 32 bits com sinal. Valores de ? 2.147.483.648 a + 2.147.483.647.
long - Tamanho de 64 bits com sinal. Valores de ? 9.223.372.036.854.775.808 a + 9.223.372.036.854.775.807
isso significa que eu no byte eu posso ter um numero que vai de -128 a 127 e assim por diante ? Pq um CNPJ por exemplo talvez não suporte um tipo inteiro já que possuui somente 14 numeros? Desde já, grato.
Para saber quantos digitos tem um número, ache a parte inteira do logaritmo decimal desse número, e some 1.
Por exemplo, para o número 2^14 (16384), cujo logaritmo decimal é 4,2144199392957367329923445261429, a parte inteira do logaritmo é 4. Somando 1, você tem 5. Portanto, você precisa de 5 dígitos para representar 2 ^ 14.
Para o número 2 ^ 63 - 1 (que é o maior long positivo), o logaritmo decimal é 18,964889726830815298418464065565, portanto você precisa de 19 dígitos para representar esse número.
Entretanto, você precisa saber qual é o maior número, com todos os dígitos 9, que cabe em um determinado número. Isso você diria que é o “número de dígitos que cabe em um determinado número”. No caso do long, seriam 18, não 19 dígitos.
Números são objetos da matemática usados contar e para medir. CPFs, CNPJs, RG, etc, não são números. Não somamos CPFs, nem dividimos, nem multiplicamos, muito menos subtraimos CNPJs.
Identificadores de documentos são sequencias de caracteres, de 0 a 9, portanto use Strings para representá-los internamente, ou mesmo arrays de char. Encapsule esta representação dentro de um objeto próprio para eles.
Mas existem situações onde precisamos realizar o cálculo de CPF [por exemplo] para verificarmos se o informado é válido.
Nesse caso não podemos trabalhar com Strings diretamente.
Sendo necessário no mínimo uma conversão.
[quote]Mas existem situações onde precisamos realizar o cálculo de CPF [por exemplo] para verificarmos se o informado é válido.
Nesse caso não podemos trabalhar com Strings diretamente.
Sendo necessário no mínimo uma conversão. [/quote]
Vc transforma partes do cpf em números, o cpf todo em si não é um número. Numeros não são separados por pontos e traço.
Mas existem situações onde precisamos realizar o cálculo de CPF [por exemplo] para verificarmos se o informado é válido.
Nesse caso não podemos trabalhar com Strings diretamente.
Sendo necessário no mínimo uma conversão.[/quote]
Cálculo de dígito verificador em módulo 11 ainda assim não considera o número inteiro, a verificação é feita dígito a digito. Usando int ou long, você teria que dividir o número várias vezes para pegar cada dígito, e fazer os cálculos. Usando array de char/byte, já fica tudo dividido.
Aliás nem me importo muito em guardar como long ou String, o ideal mesmo é encapsular em uma classe própria para eles, para estas implementações ficarem escondidas e transparentes.
[quote=rbmenezes]Bom Dia! Desculpem minha ignorancia, mas estou com uma dúvida que é a seguinte:
byte - Tamanho de 8 bits com sinal. Valores de ? 128 a + 127.
short - Tamanho de 16 bits com sinal. Valores de ? 32.768 a + 32.767.
int - Tamanho de 32 bits com sinal. Valores de ? 2.147.483.648 a + 2.147.483.647.
long - Tamanho de 64 bits com sinal. Valores de ? 9.223.372.036.854.775.808 a + 9.223.372.036.854.775.807
isso significa que eu no byte eu posso ter um numero que vai de -128 a 127 e assim por diante ? Pq um CNPJ por exemplo talvez não suporte um tipo inteiro já que possuui somente 14 numeros? Desde já, grato.[/quote]
O uso dos tipos nativos de dados numéricos, visa otimizar o uso de memória da JVM.
Documentos em geral são índices de cadastros, alguns tem agregados dígitos validadores, mas fundamentalmente são índices e são armazenados como indices.
Reconheça o escopo de cada aplicação e utilize adequadamente.
Abaixo listo os tipos nativos de Java:
[list]boolean (true ou false): Valores Booleanos[/list][list]char (0 a 65535): Caracteres representados em 16 bits[/list][list]byte (-128 a 127): Inteiro de 8 bits[/list][list]short (-32768 a 32767): Inteiro de 16 bits[/list][list]int (-2E31 e 2E31): Inteiro de 32 bits[/list][list]long (-2E63 e ( 2E63 - 1) ): Inteiro de 64 bits[/list][list]float 1.40239846E-46 e 3.40282347e+38): Ponto flutuante de precisão simples[/list][list]double (4.94065645841246544E-324 e 1.7976931348623157E+308): Ponto flutuante de precisão dupla[/list][size=9]Fonte: http://infoblogs.com.br/view.action?contentId=167793&Tipos-de-dados-nativos-da-linguagem-Java.html[/size]