Saltar al contenido

Cómo imprimir un tipo int64_t en C

Encontramos el resultado a este apuro, al menos eso esperamos. Si tienes inquietudes puedes escribirlo en el apartado de comentarios, que con placer te responderemos

Solución:

Para int64_t escribe:

#include 
int64_t t;
printf("%" PRId64 "n", t);

por uint64_t escribe:

#include 
uint64_t t;
printf("%" PRIu64 "n", t);

también puedes usar PRIx64 para imprimir en hexadecimal.

cppreference.com tiene una lista completa de macros disponibles para todos los tipos, incluyendo intptr_t (PRIxPTR). Hay macros separadas para scanf, como SCNd64.


Una definición típica de PRIu16 sería "hu"tan implícito string-La concatenación constante ocurre en tiempo de compilación.

Para que su código sea completamente portátil, debe usar PRId32 y así sucesivamente para imprimir int32_ty "%d" o similar para imprimir int.

La forma C99 es

#include 
int64_t my_int = 999999999999999999;
printf("%" PRId64 "n", my_int);

¡O podrías lanzar!

printf("%ld", (long)my_int);
printf("%lld", (long long)my_int); /* C89 didn't define `long long` */
printf("%f", (double)my_int);

Si está atascado con una implementación C89 (especialmente Visual Studio), quizás pueda usar un código abierto (y ): http://code.google.com/p/msinttypes/

Con C99 el %j El modificador de longitud también se puede usar con la familia de funciones printf para imprimir valores de tipo int64_t y uint64_t:

#include 
#include 

int main(int argc, char *argv[])

    int64_t  a = 1LL << 63;
    uint64_t b = 1ULL << 63;

    printf("a=%jd (0x%jx)n", a, a);
    printf("b=%ju (0x%jx)n", b, b);

    return 0;

Compilando este código con gcc -Wall -pedantic -std=c99 no produce advertencias y el programa imprime el resultado esperado:

a=-9223372036854775808 (0x8000000000000000)
b=9223372036854775808 (0x8000000000000000)

esto es de acuerdo a printf(3) en mi sistema Linux (la página de manual dice específicamente que j se utiliza para indicar una conversión a un intmax_t o uintmax_t; en mi stdint.h, ambos int64_t y intmax_t están tipificados exactamente de la misma manera, y de manera similar para uint64_t). No estoy seguro de si esto es perfectamente portátil a otros sistemas.

valoraciones y comentarios

Si entiendes que te ha sido de ayuda este post, te agradeceríamos que lo compartas con otros seniors de este modo contrubuyes a extender esta información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *