resetear reiniciar play moto hard fabrica como c syntax printf format-specifiers long-long

reiniciar - hard reset moto z2 play



¿Cómo formatear un int largo sin firmar largo usando printf? (12)

Además de lo que la gente escribió hace años:

  • puede obtener este error en gcc / mingw:

main.c:30:3: warning: unknown conversion type character ''l'' in format [-Wformat=]

printf("%llu/n", k);

Entonces su versión de mingw no es por defecto c99. Agregue este indicador de compilador: -std=c99 .

#include <stdio.h> int main() { unsigned long long int num = 285212672; //FYI: fits in 29 bits int normalInt = 5; printf("My number is %d bytes wide and its value is %ul. A normal number is %d./n", sizeof(num), num, normalInt); return 0; }

Salida:

My number is 8 bytes wide and its value is 285212672l. A normal number is 0.

Asumo que este resultado inesperado es de la impresión del unsigned long long int . ¿Cómo se printf() una unsigned long long int ?


Aparentemente, nadie ha ideado una solución multiplataforma * durante más de una década desde [el] año 2008, por lo que añadiré la mía. Plz upvote. (Bromeando. No me importa.)

Solución: lltoa()

Cómo utilizar:

#include <stdlib.h> /* lltoa() */ // ... char dummy[255]; printf("Over 4 bytes: %s/n", lltoa(5555555555, dummy, 10)); printf("Another one: %s/n", lltoa(15555555555, dummy, 10));

Ejemplo de OP:

#include <stdio.h> #include <stdlib.h> /* lltoa() */ int main() { unsigned long long int num = 285212672; // fits in 29 bits char dummy[255]; int normalInt = 5; printf("My number is %d bytes wide and its value is %s. " "A normal number is %d./n", sizeof(num), lltoa(num, dummy, 10), normalInt); return 0; }

A diferencia de la cadena de formato de impresión %lld , esta me funciona bajo GCC de 32 bits en Windows.

*) Bueno, casi multiplataforma. En MSVC, aparentemente necesitas _ui64toa() lugar de lltoa() .


Bueno, una forma es compilarlo como x64 con VS2008

Esto funciona como cabría esperar:

int normalInt = 5; unsigned long long int num=285212672; printf( "My number is %d bytes wide and its value is %ul. A normal number is %d /n", sizeof(num), num, normalInt);

Para el código de 32 bits, necesitamos usar el especificador de formato __int64 correcto% I64u. Así se convierte.

int normalInt = 5; unsigned __int64 num=285212672; printf( "My number is %d bytes wide and its value is %I64u. A normal number is %d", sizeof(num), num, normalInt);

Este código funciona para el compilador VS de 32 y 64 bits.


Compílalo como x64 con VS2005:

% llu funciona bien.


En Linux es %llu y en Windows es %I64u

Aunque he encontrado que no funciona en Windows 2000, parece que hay un error allí!


Esto se debe a que% llu no funciona correctamente en Windows y% d no puede manejar enteros de 64 bits. Sugiero usar PRIu64 en su lugar y encontrarás que también es portátil a Linux.

Intenta esto en su lugar:

#include <stdio.h> #include <inttypes.h> int main() { unsigned long long int num = 285212672; //FYI: fits in 29 bits int normalInt = 5; /* NOTE: PRIu64 is a preprocessor macro and thus should go outside the quoted string. */ printf("My number is %d bytes wide and its value is %" PRIu64 ". A normal number is %d./n", sizeof(num), num, normalInt); return 0; }

Salida

My number is 8 bytes wide and its value is 285212672. A normal number is 5.


Las cosas no estándar son siempre extrañas :)

para la porción larga larga bajo GNU es L , ll o q

y debajo de las ventanas creo que es sólo ll


Maleficio:

printf("64bit: %llp", 0xffffffffffffffff);

Salida:

64bit: FFFFFFFFFFFFFFFF


Por mucho tiempo (o __int64) usando MSVS, debe usar% I64d:

__int64 a; time_t b; ... fprintf(outFile,"%I64d,%I64d/n",a,b); //I is capital i


Puede intentar usar la biblioteca inttypes.h que le ofrece tipos como int32_t , int64_t , uint64_t , etc. A continuación, puede usar sus macros como:

uint64_t x; uint32_t y; printf("x: %"PRId64", y: %"PRId32"/n", x, y);

Esto está "garantizado" para no darle el mismo problema que a long , unsigned long long , a long , etc., ya que no tiene que adivinar cuántos bits hay en cada tipo de datos.


Use el modificador largo-largo ll (el-el) con la conversión u (sin signo). (Funciona en windows, gnu).

printf("%llu", 285212672);


%d -> para int

%u -> para unsigned int

%ld -> por long int

%lu -> para unsigned long int

%lld -> por long long int

%llu -> para unsigned long long int