Opérateurs au niveau du bit et de la chaîne Binaire évaluations
J'ai une mission où je dois convertir en hexadécimal de 16 bits en une chaîne binaire, puis de comparer deux à l'aide de ces opérateurs au niveau du bit. J'ai une boucle qui s'exécute a.charAt[i]
& b.charAt[i]
à un générateur de chaîne en chaîne. Maintenant, j'attends que la sortie d'un nombre binaire, mais j'arrive à un point où à chaque fois que la ligne s'exécute, il me donne les numéros qui ne sont pas de 0 ou de 1. Et il me donne 2 chiffres (2 et 3). Ce que je fais mal?
Code:
int bin = 0;
hex = hex.replaceFirst("0x", "");
bin = Integer.parseInt(hex, 16);
hex = String.format("%16s", Integer.toBinaryString(bin));
return hex;
Les deux caractères hexadécimaux je suis en train de les évaluer sont FFF7
et 0001
. J'ai réussi à convertir à des chaînes binaires. Aussi, je ne sais pas pourquoi, mais les précédents, les zéros ne sont pas montrés, juste les espaces :/
J'ai regardé en ligne intensivement pendant des heures et n'arrive pas à trouver le problème que j'ai.
- Vous devriez inclure dans votre code. Il aide.
- Les opérations binaires tels que
&
fonctionner sur tous les bits des deux numéros à la fois, non pas sur leurs bits individuels. C'est pourquoi le résultat dex & y
peut être autre chose que0
ou1
.
Vous devez vous connecter pour publier un commentaire.
Je suis en supposant que vous souhaitez au niveau du bit ET deux de 16 bits, big-endian, les nombres hexadécimaux et d'afficher le résultat sous forme binaire.
Comme d'autres l'ont dit à l'aide des chiffres plutôt que des chaînes voudrais rendre votre vie plus facile - sauf si c'est une contrainte de l'affectation?
Si je faisais cette tâche, avec mes hypothèses et comme je le comprends, je voudrais:
0x8000
jusqu'à et y compris0x0001
:&
les bits correspondantsStringBuilder
StringBuilder
À l'étape par le biais de bits correspondants de chaque numéro, je voudrais utiliser bits de masquage et le décalage de bits.
N. B.
0x8000
est le top de bit de 16 bits nombre.Une alternative est de laisser Java ne le lot, ce qui peut cependant pas être le point de votre mission:
Ce sera d'impression:
J'espère que cette aide, d'une certaine façon et que je ne suis pas trop loin de la marque avec mes hypothèses. Bonne chance!
Je pense que vous devriez regarder Entier.parseInt() pour convertir vos chaînes hexadécimales en nombres entiers. Une fois que vous avez une représentation numérique alors vos opérations binaires sera beaucoup plus facile.
Si vous avez vraiment besoin d'une chaîne binaire de représentation, découvrez Entier.toBinaryString()
sb.append((char) Integer.parseInt(n, 16)));