Comment utiliser un opérateur bitwise pour transmettre plusieurs valeurs Integer dans une fonction pour Java?
En application des cadres je continue à voir des cadres qui permettent de passer plusieurs valeurs Int (généralement utilisé à la place d'un enum) dans une fonction.
Par exemple:
public class Example
{
public class Values
{
public static final int ONE = 0x7f020000;
public static final int TWO = 0x7f020001;
public static final int THREE = 0x7f020002;
public static final int FOUR = 0x7f020003;
public static final int FIVE = 0x7f020004;
}
public static void main(String [] args)
{
//should evaluate just Values.ONE
Example.multiValueExample(Values.ONE);
//should evalueate just values Values.ONE, Values.THREE, Values.FIVE
Example.multiValueExample(Values.ONE | Values.THREE | Values.FIVE);
//should evalueate just values Values.TWO , Values.FIVE
Example.multiValueExample(Values.TWO | Values.FIVE);
}
public static void multiValueExample(int values){
//Logic that properly evaluates bitwise values
...
}
}
De sorte à ce que la logique devrait exister dans multiValueExample pour moi d'évaluer correctement les multiples int les valeurs sont passées à l'aide de l'opérateur au niveau du bit?
source d'informationauteur AtariPete | 2009-03-15
Vous devez vous connecter pour publier un commentaire.
Vos valeurs doivent être des puissances de 2.
De cette façon, vous ne perdez pas de toutes les informations lorsque vous bit à bit OU.
etc.
Ensuite, vous pouvez faire ceci:
Comme cela a déjà été mentionné, envisager l'utilisation d'énumérations au lieu de la valeur des bits.
Selon Efficace Java 2: "Article 32: l'Utilisation EnumSet au lieu de champs de bits"
Utilisation de EnumSet est assez efficace pour l'utilisation de la mémoire et très pratique.
Voici un exemple:
Vous permet de configurer les valeurs entières pour être des puissances de deux, de sorte que chaque valeur énumérée est un peu unique dans la représentation binaire.
Puis vous utilisez bit-wise OU de combiner les valeurs et au niveau du bit ET de tester les valeurs de consigne.
Les valeurs que vous les combinez avec | (binaire OU, pas de logique OU de [ | | ]) ne doit pas avoir de chevauchement "1"dans leur représentation binaire. Par exemple,
Ensuite, vous pouvez les combiner en UNE et DEUX, par exemple:
Mais vous ne pouvez pas les distinguer l'UNE | DEUX, de TROIS, parce qu'il y a chevauchement des bits. Les numéros vous combinez devraient donc être des puissances de deux, de telle sorte qu'ils ne se chevauchent pas quand OU ed ensemble. Pour tester si un nombre est passé de "valeurs", n':
De mieux comprendre pourquoi et comment cela fonctionne, je vous recommande de lire un peu sur la représentation binaire et logique. Une bonne place est Chapitre 3 de l'Art de l'Assemblée.
Bien si elles sont des puissances de 2, vous feriez quelque chose comme le "display" de la méthode dans le code ci-dessous.
Voici un lien dans wikipedia sur le sujet et ce qui doit expliquer pourquoi vous voulez des puissances de 2.
À l'aide des masques de bits ont été très populaires lorsque tous les bits compté. Une autre façon de le faire aujourd'hui est d'utiliser les énumérations sont plus simples à manipuler et à étendre.
Tout d'abord, vous ne pouvez pas définir les Valeurs de cette façon de faire des comparaisons au niveau du bit. Au lieu de cela, les différentes bits:
Seconde, vous devriez probablement utiliser des java.util.BitSet pour ces sortes d'opérations:
La Java Tutoriel chapitre sur les opérations bit à bit sont à
http://java.sun.com/docs/books/tutorial/java/nutsandbolts/op3.html
Il est très concis, mais bon pour la référence.