2011-11-01 5 views
15

Je voudrais savoir lequel est le meilleur moyen de travailler avec des nombres binaires en java. J'ai besoin d'un moyen de créer un tableau de nombres binaires et de faire quelques calculs avec eux. Par exemple, je voudrais X-ou les valeurs ou multiplier la matrice de nombres binaires. Problème résolu: Merci beaucoup pour toutes les informations.travailler avec des nombres binaires en java

Je pense que pour mon cas, je vais utiliser le BitSet mentionné par @Jarrod Roberson

+9

s'il vous plaît sélectionner la bonne réponse (ajouter la coche verte) – kritzikratzi

Répondre

0

Je ne l'ai jamais vu un ordinateur qui utilise autre chose que des nombres binaires.

L'opérateur XOR en Java est ^. Par exemple, 5^3 = 6. Le radix par défaut pour la plupart des conversions numéro à chaîne est de 10, mais il existe plusieurs méthodes qui vous permettent de spécifier une autre base, comme 2:

System.out.println(Integer.toString(5^3, 2)); 

Si vous êtes en utilisant Java 7, vous pouvez utiliser des littéraux binaires dans votre code source (en plus des formes décimales, hexadécimales et octales précédemment supportées).

+0

peut se produire: http://www.theregister.co.uk/2010/04/16/ternary_memory/ – Mat

+0

Cela peut être, mais de tels ordinateurs existent, cf. http://en.wikipedia.org/wiki/Decimal_computer. Bien sûr, la machine virtuelle Java résumerait ces détails d'implémentation. – meriton

+0

Oh, bien sûr, ils pourraient exister, je ne pense pas que Miguel en affronte un. – erickson

36

En Java Edition 7, vous pouvez simplement utiliser des nombres binaires en déclarant ints et précédant vos numéros avec 0b ou 0B:

int x=0b101; 
int y=0b110; 
int z=x+y; 

System.out.println(x + "+" + y + "=" + z); 
//5+6=11 

/* 
* If you want to output in binary format, use Integer.toBinaryString() 
*/ 

System.out.println(Integer.toBinaryString(x) + "+" + Integer.toBinaryString(y) 
     + "=" + Integer.toBinaryString(z)); 
//101+110=1011 
+7

Vous devriez mentionner que cela fonctionne uniquement à partir de Java 7 sur: http://download.oracle.com/javase/7/docs/technotes/guides/language/binary-literals.html –

+1

Fonctionne également sur Java 8. –

0

Vous pouvez les stocker sous forme byte tableaux, accès les bits individuellement. Puis à XOR vous pouvez simplement XOR les octets (c'est une opération au niveau du bit).

Bien sûr, il ne doit pas être un tableau d'octets (peut être un tableau de types int ou tout ce que vous voulez), puisque tout est stocké dans binaire à la fin.

12

Ce que vous cherchez probablement est la classe BitSet.

Cette classe implémente un vecteur de bits qui se développe selon les besoins. Chaque composant de l'ensemble de bits a une valeur booléenne. Les bits d'un BitSet sont indexés par des entiers non négatifs. Les bits indexés individuels peuvent être examinés, définis ou effacés. Un BitSet peut être utilisé pour modifier le contenu d'un autre BitSet via des opérations OR logiques, OR incluses logiques, et des opérations OU exclusives logiques.

Par défaut, tous les bits de l'ensemble ont initialement la valeur false.

Chaque ensemble de bits a une taille courante, qui est le nombre de bits d'espace actuellement utilisés par l'ensemble de bits. Notez que la taille est liée à l'implémentation d'un ensemble de bits, donc cela peut changer avec l'implémentation. La longueur d'un ensemble de bits se rapporte à la longueur logique d'un ensemble de bits et est définie indépendamment de l'implémentation.

Sauf indication contraire, le passage d'un paramètre nul à l'une des méthodes dans un BitSet entraînera une exception NullPointerException.

2

Il y a une différence entre le nombre lui-même et c'est la représentation dans la langue.Par exemple, "0xD" (base 16), "13" (base 10), "015" (base 8) et "b1101" (base 2) sont quatre représentations différentes se référant au même numéro. Cela dit, vous pouvez utiliser le type de données primitif "int" dans le langage Java pour représenter n'importe quel nombre binaire (ainsi que n'importe quel nombre dans n'importe quelle base), mais seulement dans Java 7, vous pouvez utiliser un binary literal comme vous étiez auparavant capable d'utiliser les littéraux octal (0) et hexa (0x) pour représenter ces nombres, si j'ai bien compris votre question.