¿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?
¿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?
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>
).
LLONG_MIN
debe haber como máximo -9223372036854775807
LLONG_MAX
debe haber al menos 9223372036854775807
long long int
es parte del estándar C99, y sé que GCC lo admite. And now I can prove it.
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.
'long long int' es solo un entero firmado de 64 bits (o más). Nada particularmente inusual al respecto. – bdonlan
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).
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
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. –
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.
Para imprimir largos largos variables int:
long long int lli = 100000000;
printf("%lld\n", lli);
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
"esto debería haber sido de 128 bits en las plataformas de 64 bits": cuidado de apoyar esta afirmación de alguna manera? –
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 –
Gracias a todos, nunca he jugado con los datos de 64 bits antes y me estoy volviendo loco esta noche perezoso. – Polaris878
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. –
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