2011-01-28 8 views
17

Estoy leyendo un libro de lenguaje C, decía %f, %e, %g, %a, eran caracteres impresos utilizados para los tipos de datos float y double. Actualmente puedo entender %f, %e, %g por completo.El especificador de formato% a para printf() en C

¿Cuándo necesito usar %a para imprimir float y double tipo de datos?

Por favor, muéstreme un ejemplo.

Respuesta

30

El especificador de formato %a es nuevo en C99. Imprime el número de punto flotante en forma hexadecimal. Esto no es algo que utilizaría para presentar números a los usuarios, pero es muy útil para casos de uso técnico o de bajo perfil.

A modo de ejemplo, este código:

printf("pi=%a\n", 3.14); 

impresiones:

pi=0x1.91eb86p+1 

El excelente artículo relacionado en los comentarios explica que esto se debe leer "1.91EB86 * 2 1 "(es decir, el p es para power-of-two el número de punto flotante se eleva a). En este caso, "1.91EB86 " es "1.5700000524520874 ". Multiplique esto por "2 ", y obtendrá "3.140000104904175 ".

Tenga en cuenta que esto también tiene la útil propiedad de preservar todos los bits de precisión y presentarlos de manera robusta.

+6

Puede leer más acerca de las constantes de coma flotante hexadecimales aquí: http://www.exploringbinary.com/hexadecimal-floating-point-constants/. –

6

En cuanto a un ejemplo de por qué desea utilizar la representación hexadecimal, puede utilizar% a para representar con precisión un valor de punto flotante que se envía a otra máquina para su procesamiento.

Estamos usando esto actualmente para probar unidades de un controlador integrado enviando datos de un modelo de planta simulado que emula sensores y actuadores al procesador integrado a través de un UART donde el procesador integrado procesa y devuelve retroalimentación (nuevamente , flotación representada como% a) de vuelta al modelo de planta para cerrar el ciclo.

+0

Solo un aviso en el sistema integrado, al menos con Atmel SAME70% ay% A no funcionan – jjxtra

Cuestiones relacionadas