Definición de int64 t


Soy nuevo en C / C++, así que tengo un par de preguntas sobre un tipo básico:

A) ¿Puede explicarme la diferencia entre int64_t y long (long int)? En mi entendimiento, ambos son enteros de 64 bits. ¿Hay alguna razón para elegir uno sobre el otro?

B) traté de buscar la definición de int64_t en la web, sin mucho éxito. ¿Hay alguna fuente autorizada que deba consultar para tales preguntas?

C) Para el código que usa int64_t para compilar, actualmente estoy incluyendo <iostream>, lo cual no tiene mucho sentido para mí. ¿Hay otros includes que proporcionen una declaración de int64_t?

Author: clstaudt, 2012-11-28

4 answers

A) ¿Puede explicarme la diferencia entre int64_t y long (long int)? En mi entendimiento, ambos son enteros de 64 bits. ¿Hay alguna razón para elegir uno sobre el otro?

El primero es un tipo entero con signo con exactamente 64 bits. Este último es un tipo entero con signo con al menos 32 bits.

B) traté de buscar la definición de int64_t en la web, sin mucho éxito. ¿Hay una fuente autorizada que necesito para consultar por tales preguntas?

Http://cppreference.com cubre esto aquí: http://en.cppreference.com/w/cpp/types/integer. La fuente autorizada, sin embargo, es el estándar de C++ (este bit en particular se puede encontrar en §18.4 Tipos enteros [cstdint]).

C) Para el código que usa int64_t para compilar, estoy incluyendo <iostream>, lo cual no tiene mucho sentido para mí. ¿Hay otros includes que proporcionan una declaración de int64_t?

Se declara en <cstdint> o <cinttypes> (bajo el espacio de nombres std), o en <stdint.h> o <inttypes.h> (en el espacio de nombres global).

 74
Author: R. Martinho Fernandes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:02:23

int64_t está garantizado por el estándar C99 para ser exactamente 64 bits de ancho en las plataformas que lo implementan, no hay tal garantía para un long que es de al menos 32 bits por lo que podría ser más.

§7.18.1.3 Tipos enteros de anchura exacta 1 El nombre typedef intN_t designa un tipo entero con signo con ancho N, sin bits de relleno, y una representación de complemento de dos. Por lo tanto, int8_t denota un signo tipo entero con un ancho de exactamente 8 bits.

 7
Author: iabdalkader,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-28 11:44:30

int64_t es typedef se puede encontrar que en {[2] } en C

 4
Author: Omkant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-28 11:53:29

Un int64_t debe tener 64 bits de ancho en cualquier plataforma (de ahí el nombre), mientras que un long puede tener diferentes longitudes en diferentes plataformas. En particular, sizeof (largo) es a menudo 4, es decir. 32 bits.

 1
Author: Kylotan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-28 11:37:59