55 votes

String.format() et nombres hexagonaux en Java

J'essaie de comprendre pourquoi String.format() se comporte comme il le fait.

Contexte : Cours de programmation de systèmes, écriture d'un assembleur.

Il y a un champ hexagonal de 5 caractères dans le fichier objet, que je crée à partir d'une valeur.

J'ai essayé de l'utiliser : String.format("%05X", decInt);

Cela fonctionne comme prévu pour les nombres positifs (11 -> 0000B ) Cependant, elle échoue pour les nombres négatifs (-1 -> FFFFFFFF au lieu de FFFFF )

Je suppose que je pourrais simplement prendre une sous-chaîne des 5 derniers caractères, mais j'aimerais quand même comprendre pourquoi il se comporte de cette façon.

79voto

Daniel Martin Points 9148

La largeur utilisée dans le format est toujours une largeur minimale. Dans ce cas, au lieu d'utiliser des opérations de sous-chaîne, je suggérerais :

  String.format("%05X", decInt & 0xFFFFF);

13voto

Bohemian Points 134107

La largeur du format ne fonctionne que pour créer un minimum nombre de chiffres, et n'a d'effet que sur les zéros de tête.

Au lieu d'une sous-chaîne, vous pourriez utiliser un masque de bits :

String.format("%05X", decInt & 0x0FFFFF)

Au fait, 11 -> 0000B pas 0000A comme vous le prétendez dans votre question.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X