Entier à tableau binaire
Je suis en train de convertir un entier en 7 bits Booléen tableau binaire. Jusqu'à présent, le code ne fonctionne pas:
Si je saisie dire entier de 8 à être converties, au lieu de 0001000-je obtenir 1000000, ou 15 je devrais obtenir 0001111 mais je reçois 1111000. Le char tableau est d'une longueur différente pour le tableau binaire et les positions sont fausses.
public static void main(String[] args){
String maxAmpStr = Integer.toBinaryString(8);
char[] arr = maxAmpStr.toCharArray();
boolean[] binaryarray = new boolean[7];
for (int i=0; i<maxAmpStr.length(); i++){
if (arr[i] == '1'){
binaryarray[i] = true;
}
else if (arr[i] == '0'){
binaryarray[i] = false;
}
}
System.out.println(maxAmpStr);
System.out.println(binaryarray[0]);
System.out.println(binaryarray[1]);
System.out.println(binaryarray[2]);
System.out.println(binaryarray[3]);
System.out.println(binaryarray[4]);
System.out.println(binaryarray[5]);
System.out.println(binaryarray[6]);
}
Toute aide est appréciée.
source d'informationauteur David Flanagan
Vous devez vous connecter pour publier un commentaire.
Il n'y a vraiment pas besoin de traiter avec des cordes pour cela, il suffit de faire des comparaisons au niveau du bit pour les 7 bits qui vous intéresse.
Je voudrais utiliser ce:
numéro 15 avec la base de 7 produira {false, false, false, true, true, true, true} = 0001111b
numéro 8, de la base de 7 {false, false, false, true, false, false, false} = 0001000b
Ce que vous obtenez lorsque vous ne
System.out.println(maxAmpStr);
est "1000" dans le cas de la 8.Ainsi, vous obtenez seulement la partie pertinente, la première "0000" qui vous attend est tout simplement oublié.
C'est pas joli, mais ce que vous pourriez faire est:
Conseils: Pensez à ce qui se passe quand vous obtenez une représentation de caractère, en moins de sept caractères.
En particulier, pensez à la façon dont le
char[]
etboolean[]
tableaux "line-up"; il y aura des éléments supplémentaires dans les une que les autres, alors, comment devriez-les indices de coïncider?De réponse réel: Au moment où vous êtes en utilisant le premier élément du tableau de caractères que le premier élément de la matrice booléenne, qui n'est correcte lorsque vous utilisez un sept-chaîne de caractères. En fait, vous voulez que le dernier éléments des tableaux pour coïncider (de sorte que les zéros sont matelassée à l'avant, pas à la fin).
Une façon d'aborder ce problème serait de jouer avec les indices à l'intérieur de la boucle (par exemple, de travailler sur la différence de taille et de modifier
binaryarray[i + offset]
à la place). Mais une même solution la plus simple est juste à gauche de la pad de la chaîne de zéros après la première ligne, pour s'assurer qu'elle correspond exactement à sept caractères avant de se convertir à l'omble de tableau.(En sus marque: quoi faire quand il n'y a plus de 7 caractères dans le tableau, par exemple, si quelqu'un passe dans
200
comme argument? Basé sur les deux solutions ci-dessus, vous devriez être en mesure de détecter ce cas, facilement et de les traiter spécifiquement.)Puisque personne ici n'a une réponse avec un tableau dynamique de la longueur, voici ma solution:
Le char-tableau est seulement aussi longtemps que nécessaire, de sorte que votre boolean-tableau peut être plus long et lieux les bits dans la mauvaise position. Donc, commencer par derrière, et quand votre char-tableau est terminé, remplissez votre boolean-tableau avec des 0 jusqu'à la première position.
Integer.toBinaryString(int i)
n'est pas pavé. Par exempleInteger.toBinaryString(7)
imprime111
pas00000111
que vous attendez. Vous avez besoin de prendre cela en compte au moment de décider par où commencer à remplir votre matrice booléenne.15.ToBinaryString sera '1111'
Vous êtes coupant à travers ce, de la première à la dernière lettre, de sorte que le premier "1", qui est un peu(3) est en cours dans la binaryArray[0], qui je suppose doit être bits 0.
Vous nie pad ToBinaryString avec des zéros d'une longueur de 7 (8 ??)
et puis d'inverser la chaîne, (ou boucle)
Ou vous pourriez arrêter de vous embêter avec des cordes et tout simplement utiliser peu sage opérateurs
BinaryArray[3] = (SomeInt && 2^3 != 0);
^ = puissance de l'opérateur ou si non (1 << 3) ou quelle que soit la gauche maj de Java.
répétez les étapes 1 à 3 pour i=30..0