Ähnlich wie Sie eine Ganzzahlkonstante hexadezimal oder oktal definieren können, kann ich dies auch binär tun?
Ich gebe zu, das ist eine wirklich einfache (und dumme) Frage. Meine Google-Suchanfragen sind leer.
Ähnlich wie Sie eine Ganzzahlkonstante hexadezimal oder oktal definieren können, kann ich dies auch binär tun?
Ich gebe zu, das ist eine wirklich einfache (und dumme) Frage. Meine Google-Suchanfragen sind leer.
Antworten:
Mit der Veröffentlichung von Java SE 7 ist die binäre Notation standardmäßig verfügbar. Die Syntax ist recht einfach und offensichtlich, wenn Sie ein gutes Verständnis von Binär haben:
byte fourTimesThree = 0b1100;
byte data = 0b0000110011;
short number = 0b111111111111111;
int overflow = 0b10101010101010101010101010101011;
long bow = 0b101010101010101010101010101010111L;
Und speziell im Hinblick auf die Deklaration von Variablen auf Klassenebene als Binärdateien ist es absolut kein Problem, eine statische Variable mit Binärnotation zu initialisieren:
public static final int thingy = 0b0101;
Achten Sie nur darauf, die Zahlen nicht mit zu vielen Daten zu überlaufen, da sonst ein Compilerfehler angezeigt wird:
byte data = 0b1100110011; // Type mismatch: cannot convert from int to byte
Wenn Sie wirklich Lust haben, können Sie diese andere nette neue Funktion in Java 7, die als numerische Literale bekannt ist, mit Unterstrichen kombinieren. Schauen Sie sich diese ausgefallenen Beispiele für binäre Notation mit wörtlichen Unterstrichen an:
int overflow = 0b1010_1010_1010_1010_1010_1010_1010_1011;
long bow = 0b1__01010101__01010101__01010101__01010111L;
Ist das nicht schön und sauber, ganz zu schweigen von der guten Lesbarkeit?
Ich habe diese Codefragmente aus einem kleinen Artikel gezogen, den ich über das Thema bei TheServerSide geschrieben habe. Fühlen Sie sich frei, es für weitere Details zu überprüfen:
Java 7 und Binärnotation: Beherrschen der OCP Java Programmer (OCPJP) -Prüfung
In Java 7:
int i = 0b10101010;
In älteren Java-Versionen gibt es keine binären Literale (Alternativen finden Sie in den anderen Antworten).
_
Zeichen geben kann , um die Sequenz besser lesbar zu machen: int i = 0b1010_1010_0011;
Es gibt keine binären Literale in Java, aber ich nehme an, dass Sie dies tun könnten (obwohl ich den Punkt nicht verstehe):
int a = Integer.parseInt("10101010", 2);
Die Antwort von Ed Swangren
public final static long mask12 =
Long.parseLong("00000000000000000000100000000000", 2);
funktioniert gut. Ich habe long
stattdessen int
die Modifikatoren verwendet und hinzugefügt, um die mögliche Verwendung als Bitmaske zu verdeutlichen. Es gibt jedoch zwei Unannehmlichkeiten bei diesem Ansatz.
Ich kann einen alternativen Ansatz vorschlagen
public final static long mask12 = 1L << 12;
Dieser Ausdruck macht deutlich, dass das 12. Bit 1 ist (die Zählung beginnt bei 0, von rechts nach links); und wenn Sie den Mauszeiger bewegen, wird der Tooltip angezeigt
long YourClassName.mask12 = 4096 [0x1000]
erscheint in Eclipse. Sie können kompliziertere Konstanten definieren wie:
public final static long maskForSomething = mask12 | mask3 | mask0;
oder explizit
public final static long maskForSomething = (1L<<12)|(1L<<3)|(1L<<0);
Der Wert der Variablen maskForSomething
ist zur Entwicklungszeit weiterhin in Eclipse verfügbar.
Konstanten deklarieren:
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;
und benutze sie
if( (value & ( FLAG_B | FLAG_D )) != 0){
// value has set FLAG_B and FLAG_D
}
Suchen Sie bei Google nach "Java-Literal-Syntax" und Sie kommen auf einige Einträge.
Es gibt eine Oktalsyntax (Präfix Ihrer Zahl mit 0), eine Dezimalsyntax und eine Hexadezimalsyntax mit einem Präfix "0x". Aber keine Syntax für die binäre Notation.
Einige Beispiele:
int i = 0xcafe ; // hexadecimal case
int j = 045 ; // octal case
int l = 42 ; // decimal case
byte b = 0b01000001
(zur besseren Lesbarkeit byte b = 0b0100_0001
).
Wenn Sie mit viel Binärdatei herumspielen möchten, können Sie einige Konstanten definieren:
public static final int BIT_0 = 0x00000001;
public static final int BIT_1 = 0x00000002;
etc.
oder
public static final int B_00000001 = 0x00000001;
public static final int B_00000010 = 0x00000002;
public static final int B_00000100 = 0x00000004;