Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

John Aley

quais os Reais valores suportados pelo "int"?

Recommended Posts

Já procurei em vários livros e todos eles falam a mesma coisa sempre. Int suportar até o 32767. Mas então por que consigo fazer programas usando int com valores de 9 digitos?
E se eu usar o long int também fica a mesma coisa...

Suporta os mesmos valores, afinal o long deveria aumentar mas acaba não mudando em nada!

O que está havendo?

OBS: Quando ponho valores superiores a estes o programa buga e da valores totalmente distorcidos tanto usando long int quanto o int.

\\(corpo do código)

#include <stdio.h>
main(){
int x = 999999999;
int a = x-1;
printf("%d",a;

}

Neste programa o resultado é como esperado, 999999998 mas se eu por mais um 9 ou um número com 10 dígitos a conta gera um resultado de 1,410,065,406 ou seja um número absurdo.

 

 

Agradeço a atenção de todos.

Muito obrigado! =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio que colocar números acima do que é suportado pelo tipo irá "invadir" espaços de memória usado por outras variáveis.

Em um programa maior, com certeza irá dar problema. Reforçando, creio que... fui pela lógica, também aguardo a resposta desta pergunta. :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

O signed short int vai até 32767 por ter 2 bytes (declaração: short int). O int "normal" que a maioria usa tem 4 bytes.

 

Dê uma olhada no header limits.h. Já fiz isso por curiosidade. Acho que os defines a procurar são INT_MIN e INT_MAX (válidos p/ signed int) e SHRT_MIN e SHRT_MAX (signed short int). Lá tem inclusive a quantidade de bytes de cada tipo (se eu não me engano, tem uma seção de defines específica do C99 e outra para o GCC + POSIX)

Compartilhar este post


Link para o post
Compartilhar em outros sites

GBecker, essa fonte está errada.

 

 

Do padrão da linguagem:

 


 

(...) Their implementation-defined values shall be equal or greater in magnitude (absolute value) to those shown, with the same sign.

 

 

Ou seja, C não define valores máximos ou mínimos.

 

Define limites inferiores para o valores máximos (um máximo mínimo) de cada tipo e um limite superior para os valores mínimos (um mínimo máximo). Assim garante-se que determinados intervalos possam ser representados por determinados tipos, mas não se impõe restrições desnecessárias às implementações.

 

Nesta mesma seção consta o seguinte:

 

 

INT_MIN -32767 (...)
INT_MAX +32767 (...)

 

Curiosidade: um byte não necessariamente tem 8 bits. Implementações sobre diferentes arquiteturas da IBM possuíam bytes de 9 bits e (int)s de 4 bytes (e, portanto, 36 bits). A única garantia é que CHAR_BIT (constante que determina o número de bits em um byte) é maior ou igual a 8.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hum, ok.

 

Sempre tratei essa fonte como correta, quando precisava fazer alguma consulta sobre limites.

 

O correto então é fazer o que postou a _isis_, consultar o limits.h.

 

Vlw guidjos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.