2011-12-24 10 views
5

Estoy un poco confundido en cuanto a cuánto tiempo trabaja en C.Cómo usar el tipo de datos largos en C?

Si solicito el valor máximo de un largo en Java obtengo un número en los quintillones. Si lo solicito en C, firmado o sin firmar, está en los miles de millones.

Java se basa en C ... ¿de dónde viene la diferencia?

También intenté representar literales con valores largos largos, valores largos sin firmar/con signo y valores largos int. Ninguno de ellos parece manejar números más allá de mediados de miles de millones. ¿Por qué? ¿Estoy cometiendo un error?

+1

http://en.wikipedia.org/wiki/Integer_(computer_science) –

Respuesta

10

El estándar C define long para que sea al menos tan grande como int. El tamaño real depende de la implementación. Este no es el caso para Java, en el que se requiere long para tener 64 bits de longitud.

El estándar C99 define los tipos de enteros de tamaño fijo como int64_t definidos en stdint.h que puede usar si necesita enteros de tamaño fijo en todas las plataformas.

+0

Solo para agregar un comentario: Por lo general, depende de los bits de su sistema operativo, pero por supuesto no tiene que ser el caso. – Dimme

+0

¿Puedo usar una extensión de 64 bits en la biblioteca C estándar? – bgroenks

+1

@ ghostsoldier23 Puede usar 64 long para las bibliotecas que toman valores de 64 bits, generalmente requieren que su programa se compile como de 64 bits, p. cuando 'size_t' es de 64 bits. –

2

C también tiene el tipo long long. Esa es garantía de al menos 64 bits.

+0

C99 define 'long long int' como _at least_ ser capaz de contener enteros de 64 bits y mayor que el tamaño de' long int'. No es necesariamente de 64 bits. –

+0

@MehrdadAfshari, a la derecha, no fui lo suficientemente preciso, gracias, cambiado. –

+0

@Mehrdad: dijiste, en efecto, que el tamaño de 'long long int' debe ser estrictamente mayor que el tamaño de' long int'; ¿Es eso correcto? Sin duda, una implementación conforme puede proporcionar 'long long int' del mismo tamaño que' long int'; el tamaño de 'long long int 'no puede ser menor que el tamaño de' long int'. –

0

Si desea trabajar con números más grandes que puede utilizar el MP Biblioteca Bignum GNU aquí: http://gmplib.org/ Los números y la precisión sólo está limitado por la memoria disponible de la máquina que se ejecuta.

Cuestiones relacionadas