2011-11-01 15 views
15

Vorrei sapere qual è il modo migliore per lavorare con i numeri binari in java. Ho bisogno di un modo per creare una matrice di numeri binari e fare alcuni calcoli con loro. Ad esempio, vorrei X-o i valori o moltiplicare la matrice dei numeri binari.funziona con numeri binari in java

Problema risolto: Grazie mille per tutte le informazioni.

Penso che per il mio caso ho intenzione di utilizzare il BitSet citato da @Jarrod Roberson

+9

si prega di selezionare la risposta corretta (aggiungere il segno di spunta verde) – kritzikratzi

risposta

0

Non ho mai visto un computer che utilizza tutt'altro numeri binari.

L'operatore XOR in Java è ^. Ad esempio, 5^3 = 6. La radice di default per la maggior parte delle conversioni da numero a stringa è 10, ma ci sono diversi metodi che consentono di specificare un'altra base, come 2:

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

Se sei utilizzando Java 7, è possibile utilizzare valori letterali binari nel codice sorgente (in aggiunta alle forme decimale, esadecimale e ottale precedentemente supportate).

+0

potrebbe accadere: http://www.theregister.co.uk/2010/04/16/ternary_memory/ – Mat

+0

Che può essere, ma questi computer esistono, cf. http://en.wikipedia.org/wiki/Decimal_computer. Ovviamente, Java Virtual Machine estrae tali dettagli di implementazione. – meriton

+0

Oh, certo, potrebbero esistere, semplicemente non penso che Miguel ne stia confrontando uno. – erickson

36

Nell'edizione Java 7, si può semplicemente utilizzare numeri binari dichiarando int e che precede i numeri con 0b o 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

Si dovrebbe menzionare che questo funziona solo da Java 7 su: http://download.oracle.com/javase/7/docs/technotes/guides/language/binary-literals.html –

+1

Funziona anche su Java 8. –

0

È possibile memorizzare come byte array, quindi accedere ai bit singolarmente. Poi a XOR li puoi semplicemente XOR i byte (è un'operazione bit a bit).

Ovviamente non deve essere una matrice di byte (potrebbe essere una matrice di tipi int o qualsiasi altra cosa si desideri), poiché tutto è archiviato in binario alla fine.

12

Quello che stai probabilmente cercando è la classe BitSet.

Questa classe implementa un vettore di bit che cresce all'occorrenza. Ogni componente del set di bit ha un valore booleano. I bit di un BitSet sono indicizzati da numeri interi non negativi. I singoli bit indicizzati possono essere esaminati, impostati o cancellati. È possibile utilizzare un BitSet per modificare il contenuto di di un altro BitSet tramite OR logico, OR logico compreso, e operazioni logiche OR esclusive.

Per impostazione predefinita, tutti i bit nell'insieme hanno inizialmente il valore false.

Ogni bit impostato ha una dimensione corrente, ovvero il numero di bit di spazio attualmente in uso dal bit impostato. Si noti che la dimensione è correlata all'implementazione di di un set di bit, pertanto potrebbe cambiare con l'implementazione. La lunghezza di un bit di si riferisce alla lunghezza logica di un bit impostato ed è definita indipendentemente dall'implementazione.

Salvo diversa indicazione, il passaggio di un parametro null a uno qualsiasi dei metodi in un BitSet determinerà una NullPointerException.

2

C'è una differenza tra il numero stesso e è la rappresentazione nella lingua.Ad esempio, "0xD" (radix 16), "13" (radix 10), "015" (radix 8) e "b1101" (radix 2) sono quattro rappresentazioni differenti che si riferiscono allo stesso numero.

Detto questo, è possibile utilizzare il tipo di dati primitivi "int" nel linguaggio Java per rappresentare qualsiasi numero binario (così come qualsiasi numero in qualsiasi radix), ma solo in Java 7 è possibile utilizzare uno binary literal come in precedenza eri in grado di usare i letterali ottale (0) ed hexa (0x) per rappresentare quei numeri, se ho capito correttamente la tua domanda.