Pregunta

El printf La función toma un tipo de argumento, como %d o %i para signed int.Sin embargo, no veo nada por un long valor.

¿Fue útil?

Solución

Poner un l (letra L minúscula) directamente antes del especificador.

unsigned long n;
long m;

printf("%lu %ld", n, m);

Otros consejos

Creo que quieres decir:

unsigned long n;
printf("%lu", n);   // unsigned long

o

long n;
printf("%ld", n);   // signed long

En la mayoría de las plataformas, long y int son del mismo tamaño (32 bits).Aún así, tiene su propio especificador de formato:

long n;
unsigned long un;
printf("%ld", n); // signed
printf("%lu", un); // unsigned

Para 64 bits, querrás un long long:

long long n;
unsigned long long un;
printf("%lld", n); // signed
printf("%llu", un); // unsigned

Ah, y por supuesto, es diferente en Windows:

printf("%l64d", n); // signed
printf("%l64u", un); // unsigned

Con frecuencia, cuando imprimo valores de 64 bits, me resulta útil imprimirlos en hexadecimal (generalmente con números tan grandes, son punteros o campos de bits).

unsigned long long n;
printf("0x%016llX", n); // "0x" followed by "0-padded", "16 char wide", "long long", "HEX with 0-9A-F"

imprimirá:

0x00000000DEADBEEF

Por cierto, "largo" ya no significa mucho (en x64 convencional)."int" es el tamaño int predeterminado de la plataforma, normalmente 32 bits."largo" suele ser del mismo tamaño.Sin embargo, tienen una semántica de portabilidad diferente en plataformas más antiguas (¡y en plataformas integradas modernas!)."largo, largo" es un número de 64 bits y, por lo general, lo que la gente quería usar a menos que realmente supieran lo que estaban haciendo editando un fragmento de código portátil de plataforma x.Incluso entonces, probablemente habrían usado una macro para capturar el significado semántico del tipo (por ejemplo, uint64_t).

char c;       // 8 bits
short s;      // 16 bits
int i;        // 32 bits (on modern platforms)
long l;       // 32 bits
long long ll; // 64 bits 

En el pasado, "int" era de 16 bits.Uno pensaría que ahora sería de 64 bits, pero no, eso habría causado increíbles problemas de portabilidad.Por supuesto, incluso esto es una simplificación de la verdad arcana y rica en historia.Ver wiki: entero

Depende, si te refieres a un carácter largo sin firmar, el carácter de formato es "%lu".Si te refieres a firmado largo, el carácter de formato es "%ld".

En caso de que estés buscando imprimir unsigned long long como estaba yo, uso:

unsigned long long n;
printf("%llu", n);

Para todas las demás combinaciones, creo que usas la tabla de el manual impreso, tomando la fila, luego la etiqueta de la columna para cualquier tipo que esté intentando imprimir (como hago yo con printf("%llu", n) arriba).

Creo que para responder definitivamente a esta pregunta sería necesario conocer el nombre y la versión del compilador que está utilizando y la plataforma (tipo de CPU, sistema operativo, etc.) para la que está compilando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top