La printf
función toma un tipo de argumento, como %d
o %i
para a signed int
. Sin embargo, no veo nada por un long
valor.
c
printf
long-integer
Thomas Owens
fuente
fuente
Respuestas:
Ponga una
l
(letra minúscula L) directamente antes del especificador.fuente
printf("%ld", ULONG_MAX)
genera el valor como -1. Debe serprintf("%lu", ULONG_MAX)
por tiempo no firmado como se describe a continuación @Blorgbeard.%ld
que sea más armónico con la pregunta OP.%l
disparawarning: unknown conversion type character 0x20 in format [-Wformat]
Creo que quieres decir:
o
fuente
En la mayoría de las plataformas,
long
yint
son del mismo tamaño (32 bits). Aún así, tiene su propio especificador de formato:Para 64 bits, querrás un
long long
:Ah, y por supuesto, es diferente en Windows:
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).
imprimirá:
Por cierto, "largo" ya no significa tanto (en mainstream x64). "int" es el tamaño int predeterminado de la plataforma, generalmente 32 bits. "largo" suele ser del mismo tamaño. Sin embargo, tienen una semántica de portabilidad diferente en plataformas más antiguas (¡y plataformas integradas modernas!). "long long" es un número de 64 bits y, por lo general, lo que las personas querían usar a menos que realmente supieran lo que estaban haciendo editando un código portátil de plataforma x. Incluso entonces, probablemente habrían usado una macro en su lugar para capturar el significado semántico del tipo (por ejemplo, uint64_t).
En el pasado, "int" era de 16 bits. Uno pensaría que ahora serían 64 bits, pero no, eso habría causado problemas de portabilidad locos. Por supuesto, incluso esto es una simplificación de la verdad arcana y rica en historia. Ver wiki: entero
fuente
long
tamaño de 32" sea cierto. Por ejemplo, estoy en Oracle Linux x86_64 / amd64, y connvcc
unlong
es de 8 bytes.Depende, si se refiere a largo sin signo, el carácter de formato es
"%lu"
. Si te refieres a firmado largo, el carácter de formato es"%ld"
.fuente
%ld
verprintf
referencia en cplusplus.comfuente
En caso de que desee imprimir
unsigned long long
como yo, use:Para todas las demás combinaciones, creo que usa la tabla del manual printf , tomando la etiqueta de la fila y luego la columna para el tipo que esté intentando imprimir (como hago con lo
printf("%llu", n)
anterior).fuente
Creo que responder esta pregunta definitivamente requeriría 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.
fuente