sintaxis lenguaje example ejemplos dev c printf long-integer

lenguaje - ¿Cuál es el argumento para printf que formatea un largo?



printf y scanf en dev c++ (7)

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


Coloque una l (letra minúscula L) directamente delante del especificador.

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


Creo que quieres decir:

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

o

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


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


Depende, si se está refiriendo a sin signo durante mucho tiempo, el carácter de formato es "%lu" . Si está refiriéndose a firmado durante mucho tiempo el carácter de formato es "%ld" .


En caso de que quiera imprimir unsigned long long como lo estaba, use:

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

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


En la mayoría de las plataformas, long e 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 estoy imprimiendo 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 la corriente principal x64). "int" es el tamaño int predeterminado de la plataforma, normalmente de 32 bits. "largo" suele ser del mismo tamaño. Sin embargo, tienen diferentes semánticas de portabilidad en plataformas más antiguas (¡y plataformas integradas modernas!). "long long" es un número de 64 bits y generalmente lo que la gente quería usar a menos que realmente supiera lo que estaban haciendo editando un trozo 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 día, "int" era de 16 bits. Usted pensaría que ahora serían 64 bits, pero no, eso habría causado problemas de portabilidad insanos. Por supuesto, incluso esta es una simplificación de la verdad arcana y rica en historia. Ver wiki:Integer