John Aley 0 Denunciar post Postado Julho 23, 2013 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
reebr 94 Denunciar post Postado Julho 23, 2013 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
_Isis_ 202 Denunciar post Postado Julho 23, 2013 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 51 Denunciar post Postado Julho 23, 2013 Aqui uma tabela dos tipos de dados: http://equipe.nce.ufrj.br/adriano/c/apostila/tipos.htm Compartilhar este post Link para o post Compartilhar em outros sites
guidjos 65 Denunciar post Postado Julho 24, 2013 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
GBecker 51 Denunciar post Postado Julho 24, 2013 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
John Aley 0 Denunciar post Postado Julho 24, 2013 Muito obrigado a todos, problema resolvido! :3 Compartilhar este post Link para o post Compartilhar em outros sites