Le spécificateur de format% a pour printf () en C

Je lis un livre en langage C, il était écrit que %f, %e, %g, %a étaient des caractères printf utilisés pour les types float et double . Actuellement, je peux comprendre complètement %f, %e, %g .

Quand dois-je utiliser %a pour imprimer des données float et double données de type double ?

Pouvez-vous s’il vous plaît me montrer un exemple.

Le spécificateur de formatage %a est nouveau dans C99. Il imprime le nombre à virgule flottante sous forme hexadécimale. Ce n’est pas quelque chose que vous utiliseriez pour présenter des chiffres aux utilisateurs, mais c’est très pratique pour les cas d’utilisation sous le capot / technique.

A titre d’exemple, ce code:

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

impressions:

 pi=0x1.91eb86p+1 

L’excellent article lié aux commentaires explique qu’il convient de lire “1.91EB86 16 * 2 1 ” ( c’est-à-dire que le p correspond à la power-of-two le nombre à virgule flottante élevé ). Dans ce cas, “1.91EB86 16 ” est “1.5700000524520874 10 “. Multipliez cela par le “2 1 ” et vous obtenez “3.140000104904175 10 “.

Notez que cela a également la propriété utile de préserver toutes les bits de précision et de les présenter de manière robuste.

En ce qui concerne, par exemple, l’utilisation de la représentation hexadécimale, vous pouvez utiliser% a pour représenter avec précision une valeur en virgule flottante envoyée à une autre machine pour traitement.

Nous l’utilisons actuellement pour tester un contrôleur intégré en envoyant des données d’un modèle d’installation simulé émulant des capteurs et des actionneurs au processeur intégré via un UART via lequel le processeur intégré effectue son traitement de contrôle et renvoie le retour (à nouveau, float représenté par % a) retour au modèle d’installation pour fermer la boucle.