• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

skcratch

C - Maior número inteiro

9 mensagens neste tópico

Viva!

Será que alguém me podia dizer se existe alguma representação tipo constante (ou algo desse género), para o maior número inteiro que se pode representar em C?

Grato desde já pela ajuda!

Cumps!

:)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, essas informações estão no ficheiro limits.h.

Aqui fica um exemplo:

int main(int argc, char *argv[])
{
printf("TYPE \t\t BYTES \t SMALLEST \t\t LARGEST\n\n");

printf("signed char \t %zd \t %hhd \t\t\t %hhd\n",
	sizeof(signed char), CHAR_MIN, CHAR_MAX);

printf("unsigned char \t %zd \t 0 \t\t\t %hhu\n\n",
	sizeof(unsigned char), UCHAR_MAX);

printf("signed int \t %zd \t %d \t\t %d\n",
	sizeof(signed int), INT_MIN, INT_MAX);

printf("unsigned int \t %zd \t 0 \t\t\t %u\n\n",
	sizeof(unsigned int), UINT_MAX);

printf("signed short \t %zd \t %hd \t\t %hd\n",
	sizeof(signed short), SHRT_MIN, SHRT_MAX);

printf("unsigned short \t %zd \t 0 \t\t\t %hu\n\n",
	sizeof(unsigned short), USHRT_MAX);

printf("signed long \t %zd \t %ld \t %ld\n",
	sizeof(signed long), LONG_MIN, LONG_MAX);

printf("unsigned long \t %zd \t 0 \t\t\t %lu\n\n",
	sizeof(unsigned long), ULONG_MAX);

printf("float \t\t %zd \t %E \t\t %E\n",
	sizeof(float), FLT_MIN, FLT_MAX);

printf("double \t\t %zd \t %E \t\t %E\n",
	sizeof(double), DBL_MIN, DBL_MAX);

return 0;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

podes sempre calcular 2 ^ (4 * sizeof(tipo)) - 1. até porque int é uma word, e varia consoante a largura do bus da máquina em que se encontra.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O máximo q usei foi um numero com 19 digitos, e foi assim:

long long int numero=1234567890123456789LL;

printf("Numero: %lld", numero);

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

podes sempre calcular 2 ^ (4 * sizeof(tipo)) - 1. até porque int é uma word, e varia consoante a largura do bus da máquina em que se encontra.

Assim à primeira vista essa fórmula está errada.

Para números com sinal deve ficar 2 ^ (8 * sizeof(tipo) - 1) - 1 e sem sinal 2 ^ (8 * sizeof(tipo)) - 1.

De qualquer forma é muito mais simples, seguro e eficiente usar as constantes do sistema.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O máximo q usei foi um numero com 19 digitos, e foi assim:

long long int numero=1234567890123456789LL;

printf("Numero: %lld", numero);

maior ainda seria

unsigned long long int numero;

E este sim, o maior de todos :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

e possivel que seja o maior numero em inteiro , mas penso que o long long seja uma extensao do compilador da gnu, pode nao existir em todos os compiladores de C.

boas programacoes

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

e possivel que seja o maior numero em inteiro , mas penso que o long long seja uma extensao do compilador da gnu, pode nao existir em todos os compiladores de C.

boas programacoes

Existe em todos os compiladores que suportem a norma C99.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora