Tamanaho de variaveis

11 respostas
R

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.

11 Respostas

E

Um CPF ou um CNPJ devem ser guardados como long ou como string. Eles não cabem em um int.

R

Ok. Mas eu quero entender pq? Como é calculado esse tamanho?

B

O tamanho é de acordo com a quantidade de bits de cada tipo, e a representação binária interna é em complemento para dois.

bytes tem 8 bits, short e char tem 16 bits (no caso de char, não tem números negativos), int tem 32 bits, long é 64 bits.

E

Quer saber mesmo?

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.

B

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.

Felipe_Gomes

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.

rodpuc

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.

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.

B

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.

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.

Java_Lover

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.


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]

Felipe_Gomes

Legal Bruno!

R

Ok. Valeu pela informação.

Criado 5 de março de 2010
Ultima resposta 5 de mar. de 2010
Respostas 11
Participantes 6