Comment obtenir 0-collier de représentation binaire d'un entier en java?
par exemple, pour 1, 2, 128, 256
la sortie peut être (16 chiffres):
0000000000000001
0000000000000010
0000000010000000
0000000100000000
J'ai essayé
String.format("%16s", Integer.toBinaryString(1));
il met des espaces à gauche-rembourrage:
` 1'
Comment mettre 0
s pour le rembourrage. Je ne pouvais pas le trouver dans Formateur. Est-il une autre façon de le faire?
P. S. ce post explique comment formater entiers à gauche 0-padding, mais ce n'est pas pour la représentation binaire.
- Avez-vous essayé d'utiliser
%016s
? - oui, il échoue avec
Exception in thread "main" java.util.FormatFlagsConversionMismatchException: Conversion = s, Flags = 0
- jetez un oeil à ceci: stackoverflow.com/a/15124135/1316649
Vous devez vous connecter pour publier un commentaire.
Je pense que c'est une solution sous-optimale, mais vous pourriez le faire
Il n'y a pas de conversion en binaire construit en java.util.Formateur, je vous conseille d'utiliser de la Chaîne.remplacer pour remplacer les espaces par des zéros, comme dans:
Ou de mettre en œuvre votre propre logique de convertir des entiers en binaire de représentation avec l'ajout de padding à gauche quelque part le long des lignes données dans cette donc.
Ou si vous avez vraiment besoin de passer de nombre de format, vous pouvez convertir votre représentation binaire de BigInteger et puis le format que de zéros, mais c'est très coûteux au moment de l'exécution, comme dans:
Vous pouvez utiliser Apache Commons StringUtils. Il propose des méthodes pour le rembourrage des chaînes:
J'ai essayé toutes sortes d'appels de méthode que je n'ai pas vraiment utilisé avant de faire ce travail, ils ont travaillé avec un succès modéré, jusqu'à ce que j'ai pensé à quelque chose qui est si simple qu'il pourrait peut-être marcher, et il l'a fait!
Je suis sûr que ça a été pensé avant, vous ne savez pas si c'est tout bon pour la longue chaîne de codes binaires, mais il fonctionne très bien pour 16Bit cordes. Espérons que cela aide!! (Note de la deuxième partie du code est amélioré)
Grâce à la Volonté de les aider à améliorer cette réponse pour le faire fonctionner avec une boucle.
Ce peut-être un peu maladroit, mais il fonctionne, merci de les améliorer et de les commenter en arrière si vous le pouvez....
binString.length()
et 16 pour créer une chaîne, puis en ajoutant la chaîne binString plutôt que d'en boucle mais avec quelque chose comme cette réponse: stackoverflow.com/a/2804866/1353098Ici une nouvelle réponse pour un vieux post.
Pour coussin d'une valeur binaire avec des zéros à une longueur spécifique, essayez ceci:
Si
len = 4
etval = 1
,renvoie la chaîne
"10001"
, puisrejette le premier caractère très. Si nous obtenons ce que nous voulons:
Si
val
est susceptible d'être négatif, essayez plutôt:essayer...
Je ne pense pas que c'est la "bonne" façon de le faire... mais ça marche 🙂
0000001111111111
pour la valeur d'entrée1023
Toute valeur supérieure à celle que produit le résultat detoBinaryString(1024)
de10000000000
qui est trop grand pour leparseInt(...)
Ainsi, l'entrée ne fonctionne que pour les 1K de 64 KO valeurs d'entrée possiblesJe ne sais pas "bonne" solution, mais je peux vous suggérer un fast-patch.
J'ai juste essayé et vu que cela fonctionne bien.
%32s
?Une version plus simple de user3608934 l'idée de "C'est un vieux truc, créer une chaîne avec 16 0 puis ajouter le garni chaîne binaire vous avez ":
Un naïf solution que le travail serait
Une autre méthode serait
Cela produira un 16 chaîne de bits de l'entier 5
C'est un vieux truc, créer une chaîne avec 16 0 puis ajouter le garni chaîne binaire reçu de la part de la Chaîne.format("%s", Entier.toBinaryString(1)) et utilisez le bouton droit de plus de 16 caractères, tailler hors tout 0 de. Mieux encore, faire une fonction qui vous permet de spécifier combien de temps d'une chaîne binaire que vous voulez. Bien sûr, il ya probablement un bazillion d'autres manières d'y parvenir, y compris les bibliothèques, mais je suis en ajoutant ce post pour aider un ami 🙂
Je voudrais écrire ma propre util classe avec la méthode ci-dessous
}
De sortie:
La même approche pourrait être appliquée à tous les types intégraux. Attention le type de masque
long mask = 1L << i;
Cette méthode convertit un entier en Chaîne de caractères de longueur=bits. Soit rembourré avec des 0 ou avec les bits les plus significatifs tronquée.
Vous pouvez utiliser la lib https://github.com/kssource/BitSequence. Il accepte un nombre et retour bynary chaîne, collier et/ou regroupées.
str[i].length()
est la longueur du numéro de dire 2 en binaire est 01, qui est de longueur 2changement de 4 jusqu'à la longueur maximale du numéro. Cela peut être optimisé pour O(n).
en utilisant continuer.
//Ci-dessous permettra de gérer correctement les tailles
numB
etnum
sont égaux et n'est pas différente en quelque sorte