Comment pourrais-je convertir un 64-largeur de la chaîne binaire de long en Java?
Je veux convertir un 64-largeur de la chaîne binaire à long terme, il ya une méthode statique:
Long.parseLong(String s, int radix)
pour ce faire, mais il n'est pas adapté pour mon cas.
Le problème, c'est ma chaîne binaire est une machine de style long int.
Par exemple:
1111111111111111111111111111111111111111111111111111111110000101
représente -123
, mais cette méthode reconnaître comme un immense nombre positif, cela me trouble, comment pourrais-je résoudre ce problème?
Dois-je écrire une fonction qui fait le complément?
Pourriez-vous expliquer plus sur
Tout d'abord, je vous Remercie beaucoup. C'est -123 mais pas 123, qui est négatif. machine de style signifie qu'il est la représentation du matériel de l'ordinateur, qui utilisent des "1" dans le premier bit est à dire un nombre négatif, et de 0 à dire non-nombre positif, c'est différent de l'homme-style, qui utilisent les "-" pour nombre négatif. Suis-je clair?
Je pense que vous pourriez avoir besoin de vérifier votre représentation de chaîne de -123 comme un numéro de long.
machine-style long int
et comment 123 est représenté par cette longue binaire. Coz binaire de 123 est 1111011. Désolé si je n'ai pas eu à votre question de droit.Tout d'abord, je vous Remercie beaucoup. C'est -123 mais pas 123, qui est négatif. machine de style signifie qu'il est la représentation du matériel de l'ordinateur, qui utilisent des "1" dans le premier bit est à dire un nombre négatif, et de 0 à dire non-nombre positif, c'est différent de l'homme-style, qui utilisent les "-" pour nombre négatif. Suis-je clair?
Je pense que vous pourriez avoir besoin de vérifier votre représentation de chaîne de -123 comme un numéro de long.
Long.toString(-123, 2)
rendements -1111011
.OriginalL'auteur Sefier Tang | 2011-12-02
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser BigInteger
imprime
OriginalL'auteur Peter Lawrey
Mon incroyablement piraté-ensemble de la solution, testé uniquement sur votre cas:
En gros, si le premier bit est un, le nombre est négatif, nous avons donc analyser le reste de la nombre positif, puis faire un peu de complément à deux de la magie en soustrayant le résultat de
Long.MAX_VALUE
et l'ajout de l'un, puis de forcer le négatif en arrière sur le nombre retourné. Sinon, la conversion normal s'applique.return Long.parseLong(input.substring(1), 2) + Long.MIN_VALUE
.Comme le Président Bush l'a dit, "génial"! Génial le site, génial réponses et génial les gars. J'aime cette réponse mais merci à vous tous pour votre réponses.
Cela ne fonctionne que si le nombre est de 64 chiffres. Si elle n'a pas de zéros il est probable que le premier chiffre sera
1
OriginalL'auteur Tim
Vous pourriez tout simplement les bits vous-même...
EDIT: j'ai d'abord eu 1 << i, ce qui signifie que le déplacement est un int. Fixe pour faire qu'il se fait comme un long.
OriginalL'auteur yshavit
Je ne pense pas qu'il y est une fonction de la bibliothèque pour faire ce que vous voulez, mais cela devrait fonctionner:
De sûr, vous devriez assurez-vous que la chaîne est de longueur 64 et ne contient que des 0 et des 1.
OriginalL'auteur Taymon