2009-10-06 18 views
13

¿Apoya GCC:¿GCC es compatible con long long int?

long long int 

lo que sería un entero de 64 bits?

Además, ¿es long long int parte de la norma?

+0

Gracias a todos, nunca he jugado con los datos de 64 bits antes y me estoy volviendo loco esta noche perezoso. – Polaris878

+0

Tenga en cuenta que en un entorno C99, debe usar 'int64_t' en' 'para un entero portátil de 64 bits. Si no estás en un entorno C99, 'long long' es tu mejor opción, pero en realidad no está garantizado que tenga 64 bits de ancho. –

+0

ST: Bueno, * está * garantizado que tiene * al menos * 64 bits de ancho, por lo que no debería preocuparse de que en algún lugar por ahí sea <64. De todos modos, no en una implementación conforme. – DigitalRoss

Respuesta

31

Sí GCC es compatible con long long int, que es una parte del estándar C99.

La norma no obliga a su tamaño en bits, pero requiere valores de LLONG_MIN y LLONG_MAX en <limits.h> implica que es al menos 64 bits (tipos enteros de 64 bits de ancho exactos son int64_t/uint64_t de <stdint.h>).

  1. LLONG_MIN debe haber como máximo -9223372036854775807
  2. LLONG_MAX debe haber al menos 9223372036854775807
+1

Solo para agregar ... En Windows su equivalente sería _int64 – vpram86

+7

En realidad, para ser estricto, es el equivalente de int64_t de (que también es C99). –

+0

¡Nunca sé este encabezado! ¡Gracias! – vpram86

2

Creo que por lo general un unsigned long long es la representación tradicional de un entero de 64 bits. Supongo que long long int también funcionaría, pero nunca he visto personalmente ningún vars de 64 bits declarado de esa manera.

+2

'long long int' es solo un entero firmado de 64 bits (o más). Nada particularmente inusual al respecto. – bdonlan

8

En mi máquina de 32 bits,

int main() 
{ 
    printf("%d\n", sizeof(long long int)); 
    return 0; 
} 

compilado con gcc grabados 8 (8 bytes * 8 bits/byte = 64 bits).

+18

las cadenas de formato 'size_t' deben usar' "% zu" 'not' "% d" '(del mismo modo,' ssize_t' debe usar '"% zd "'). Este es un problema en plataformas de 64 bits, donde size_t suele ser un tipo de 64 bits, mientras que int puede ser de 32 bits. – bdonlan

+1

sizeof (char) == 1 por definición, pero se permite que sea> = un byte. Así que los tipos de 64 bits pueden tener sizef (t) == 1. –

5

Sí, long long es parte de C99, así como long long constantes (10222333444555LL) y algunos elementos de soporte. (LLONG_MAX, llrint(d), llround(d), algunos otros.) Y gcc lo ha implementado desde hace un tiempo.

5

Para imprimir largos largos variables int:

long long int lli = 100000000; 

printf("%lld\n", lli); 
4

largos largos están bien soportados, y han sido durante mucho, mucho tiempo [siento]. Según tengo entendido, esto debería haber sido de 128 bits en plataformas de 64 bits, pero por razones de compatibilidad/portabilidad en GCC, se ha estandarizado en un ancho de 64 bits.

Consulte también: (u) int128_t, y esto discussion on GCC's 128-bit integer support

+0

"esto debería haber sido de 128 bits en las plataformas de 64 bits": cuidado de apoyar esta afirmación de alguna manera? –

+0

Dije, "como yo lo entiendo". Solo puedo apoyar la idea en que, como dice wikipedia, "el término palabra se usa para un pequeño grupo de bits que son manejados simultáneamente por procesadores de una arquitectura particular. El tamaño de una palabra es por lo tanto específico de la CPU". Entonces, lógicamente, una palabra larga larga sería más larga en un arco más ancho. Sin embargo, desde la misma página de wikipedia, el estándar de facto parece ser que de larga duración es de 64 bits. http://en.wikipedia.org/wiki/Integer_%28computer_science%29 –

Cuestiones relacionadas