Ir ao conteúdo
  • Cadastre-se

Variáveis em c


Visitante

Posts recomendados

Olá,

Gostaria de saber qual a maior variavel em C e como posso capturá-la e imprimí-la, ou seja, qual o especificador de conversão necessário. E quanto ela armazena.

Grato

Lucca

Link para o comentário
Compartilhar em outros sites

A maior variável inteira especificada pelo padrão ANSI/ISO C é o tipo long (signe de unsigned):


long     ->    de -2147483647  a  +2147483647
unsigned long  ->   de  0  a  4294967295

E quanto aos números de ponto flutuante, a maior é a long double:


long double   ->  +/-   1E-37  a  1E+37  e precisão mínima de 10 dígitos

Esse são os padrões mínimos. Obviamente, cada implementação pode fornecer alcances maiores.

Para imprimir um long com printf use o especificador "%ld", e para um unsigned long use "%lu".

Para imprimir um long double, use "%Lf", "%Le" ou "%Lg". Note que o "L" aqui é maiúsculo.

O padrão ANSI/ISO C não especifica um tamanho em bytes para os tipos, apenas o alcance. Você pode saber quantos bytes a variável tem usando o operador sizeof.

Ex:


unsigned long numero;
scanf("%lu", &numero);
printf("numero vale %lu e ocupa %d bytes\n", numero, sizeof(numero) );

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
Postado Originalmente por DanielKO@06 Jul. 2002, 01:35

E quanto aos números de ponto flutuante, a maior é a long double:


long double   ->  +/-   1E-37  a  1E+37  e precisão mínima de 10 dígitos

Esse são os padrões mínimos. Obviamente, cada implementação pode fornecer alcances maiores.

Sobre isso que eu ia falar.

O range que você escreveu para a precisão dupla, é o mesmo que a precisão simples. Isso é para um número de 32-bit. Falando em PCs, o co-processador matemático processa números de 80-bit (precisão extendida) desde o velho 8087 (começo da década de 80, eu acho).

Hoje, qualquer compilador decente tem 3 precisões de ponto flutuante suportadas por hardware (tem outras que são emuladas):

float ou single de 32-bit,

double de 64-bit e

long double ou extended de 80-bit

Esse última vai desde 1,2·10-4932 até 1,2·10+4932 (além do sinal). É o maior com certeza e são 19-20 dígitos. Float tem apenas 7-8 dígitos de precisão, e double 15-16. Lembrando que depende o valor para se usar 19 ou 20 dígitos

Quanto aos inteiros, mais atualmente apareceu o Int64 que é um inteiro de 64-bit (emulados pois os processadores são de 32-bit). O range dele vai de -4611686018427387904 até 4611686018427387903. Mas o processamento usado ele é bem mais lento que com long int.

Agora parece que já tem alguns compiladores suportando Int128 de 128-bit.

Link para o comentário
Compartilhar em outros sites

Realmente, existem alcances maiores. Os que passei são os do padrão ANSI/ISO C. Claro, a graaaaaaande maioria dos compiladores fornecem alcances maiores. Mas lembrando que isso é dependente da implementação, não dá prá contar sempre com isso.   ???

Mas obrigado pela informação mesmo assim;   :)

Link para o comentário
Compartilhar em outros sites

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...