Simile a come puoi definire una costante intera in esadecimale o ottale, posso farlo in binario?
Ammetto che questa sia una domanda davvero facile (e stupida). Le mie ricerche su Google risultano vuote.
Simile a come puoi definire una costante intera in esadecimale o ottale, posso farlo in binario?
Ammetto che questa sia una domanda davvero facile (e stupida). Le mie ricerche su Google risultano vuote.
Risposte:
Quindi, con il rilascio di Java SE 7, la notazione binaria diventa uno standard fuori dagli schemi. La sintassi è abbastanza semplice e ovvia se hai una discreta comprensione del binario:
byte fourTimesThree = 0b1100;
byte data = 0b0000110011;
short number = 0b111111111111111;
int overflow = 0b10101010101010101010101010101011;
long bow = 0b101010101010101010101010101010111L;
E in particolare sul punto di dichiarare le variabili a livello di classe come binari, non c'è assolutamente alcun problema a inizializzare una variabile statica usando la notazione binaria:
public static final int thingy = 0b0101;
Fai solo attenzione a non sovraccaricare i numeri con troppi dati, altrimenti riceverai un errore del compilatore:
byte data = 0b1100110011; // Type mismatch: cannot convert from int to byte
Ora, se vuoi davvero essere fantasioso, puoi combinare quell'altra nuova bella funzionalità in Java 7 nota come letterale numerico con trattini bassi. Dai un'occhiata a questi fantasiosi esempi di notazione binaria con trattini bassi letterali:
int overflow = 0b1010_1010_1010_1010_1010_1010_1010_1011;
long bow = 0b1__01010101__01010101__01010101__01010111L;
Ora non è così bello e pulito, per non parlare dell'elevata leggibilità?
Ho preso questi frammenti di codice da un piccolo articolo che ho scritto sull'argomento su TheServerSide. Sentiti libero di dare un'occhiata per maggiori dettagli:
Java 7 e notazione binaria: padronanza dell'esame OCP Java Programmer (OCPJP)
In Java 7:
int i = 0b10101010;
Non ci sono letterali binari nelle versioni precedenti di Java (vedi altre risposte per alternative).
_
caratteri per rendere la sequenza più leggibile: int i = 0b1010_1010_0011;
Non ci sono letterali binari in Java, ma suppongo che tu possa farlo (anche se non vedo il punto):
int a = Integer.parseInt("10101010", 2);
La risposta di Ed Swangren
public final static long mask12 =
Long.parseLong("00000000000000000000100000000000", 2);
funziona bene. Ho usato long
invece di int
e aggiunto i modificatori per chiarire il possibile utilizzo come maschera di bit. Tuttavia, ci sono due inconvenienti con questo approccio.
Posso suggerire un approccio alternativo
public final static long mask12 = 1L << 12;
Questa espressione rende evidente che il 12 ° bit è 1 (il conteggio parte da 0, da destra a sinistra); e quando passi il cursore del mouse, la descrizione comando
long YourClassName.mask12 = 4096 [0x1000]
appare in Eclipse. Puoi definire costanti più complicate come:
public final static long maskForSomething = mask12 | mask3 | mask0;
o esplicitamente
public final static long maskForSomething = (1L<<12)|(1L<<3)|(1L<<0);
Il valore della variabile maskForSomething
sarà ancora disponibile in Eclipse al momento dello sviluppo.
Dichiara costanti:
public static final int FLAG_A = 1 << 0;
public static final int FLAG_B = 1 << 1;
public static final int FLAG_C = 1 << 2;
public static final int FLAG_D = 1 << 3;
e usali
if( (value & ( FLAG_B | FLAG_D )) != 0){
// value has set FLAG_B and FLAG_D
}
Cerca "sintassi letterale Java" su Google e ottieni alcune voci.
C'è una sintassi ottale (anteponi il tuo numero con 0), sintassi decimale e sintassi esadecimale con un prefisso "0x". Ma nessuna sintassi per la notazione binaria.
Qualche esempio:
int i = 0xcafe ; // hexadecimal case
int j = 045 ; // octal case
int l = 42 ; // decimal case
byte b = 0b01000001
(per una migliore lettura byte b = 0b0100_0001
).
Se vuoi scherzare con un sacco di binari, potresti definire alcune costanti:
public static final int BIT_0 = 0x00000001;
public static final int BIT_1 = 0x00000002;
eccetera.
o
public static final int B_00000001 = 0x00000001;
public static final int B_00000010 = 0x00000002;
public static final int B_00000100 = 0x00000004;
Risposta leggermente più imbarazzante:
public class Main {
public static void main(String[] args) {
byte b = Byte.parseByte("10", 2);
Byte bb = new Byte(b);
System.out.println("bb should be 2, value is \"" + bb.intValue() + "\"" );
}
}
quale output [java] bb dovrebbe essere 2, il valore è "2"