webentwicklung-frage-antwort-db.com.de

Wie funktioniert das bitweise & (UND) in Java?

Ich habe einige Codebeispiele durchgelesen und bin auf ein & auf der Oracle-Website auf der Seite Bitwise and Bit Shift Operators. Meiner Meinung nach hat es nicht allzu gut funktioniert, das bitweise Erläutern von &. Ich verstehe, dass es eine Operation direkt auf den Punkt bringt, aber ich bin mir nicht sicher, welche Art von Operation es ist, und ich frage mich, was diese Operation ist. Hier ist ein Beispielprogramm, das ich von der Oracle-Website heruntergeladen habe: http://docs.Oracle.com/javase/tutorial/displayCode.html?code=http://docs.Oracle.com/javase/tutorial/ Java/nutsandbolts/examples/BitDemo.Java

40
Anzwur

Eine Ganzzahl wird als Folge von Bits im Speicher dargestellt. Für die Interaktion mit Menschen muss der Computer diese als Dezimalstellen anzeigen, alle Berechnungen werden jedoch binär ausgeführt. 123 in Dezimalzahl wird gespeichert als 1111011 in Erinnerung.

Das & Operator ist ein bitweises "Und". Das Ergebnis sind die Bits, die in beiden Zahlen eingeschaltet sind. 1001 & 1100 = 1000, da in beiden nur das erste Bit eingeschaltet ist.

Das | Operator ist ein bitweises "Oder". Das Ergebnis sind die Bits, die in einer der Zahlen eingeschaltet sind. 1001 | 1100 = 1101, da in beiden nur das zweite Bit von rechts Null ist.

Es gibt auch die ^ und ~ -Operatoren, die bitweise "Xor" bzw. bitweise "Not" sind. Endlich gibt es die <<, >> und >>> Schichtführer.


Unter der Haube, 123 wird gespeichert als entweder 01111011 00000000 00000000 00000000 oder 00000000 00000000 00000000 01111011 abhängig vom System. Bei der Verwendung der bitweisen Operatoren spielt es keine Rolle, welche Darstellung verwendet wird, da beide Darstellungen als logische Zahl 00000000000000000000000001111011. Führende Nullen werden entfernt. 1111011.

62
Markus Jarderot

Es ist ein binärer UND-Operator. Es führt eine AND-Operation aus, die Teil von Boolean Logic ist, das üblicherweise für Binärzahlen beim Rechnen verwendet wird.

Beispielsweise:

0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1

Sie können dies auch für Mehrbit-Nummern durchführen:

01 & 00 = 00
11 & 00 = 00
11 & 01 = 01
1111 & 0101 = 0101
11111111 & 01101101 = 01101101
...
9
Alex W

Wenn Sie sich zwei binär dargestellte Zahlen ansehen, wird ein bitweises & erstellt eine dritte Zahl mit einer 1 an jeder Stelle, an der beide Zahlen eine 1 haben. (Überall sonst gibt es Nullen.).


Beispiel:
0b10011011 &
0b10100010 =
0b10000010


Beachten Sie, dass Einsen nur an einer Stelle erscheinen, an der beide Argumente eine Eins haben.
Bitweise und sind nützlich, wenn jedes Bit einer Zahl eine bestimmte Information speichert.
Sie können sie auch verwenden, um bestimmte Nummernabschnitte mithilfe von Masken zu löschen/zu extrahieren.

4
user2134086

Wenn Sie die beiden Variablen gemäß ihrem Hex-Code erweitern, sind dies:

bitmask : 0000 0000 0000 1111
val:      0010 0010 0010 0010

Nun ergibt eine einfache bitweise UND-Verknüpfung die Zahl 0000 0000 0000 0010, die in Dezimaleinheiten 2 ist. Ich gehe jedoch davon aus, dass Sie über die grundlegenden booleschen Operationen und Zahlensysteme Bescheid wissen.

3
dotslash

Es ist eine logische Operation für die Eingabewerte. Um zu verstehen, konvertieren Sie die Werte in die binäre Form und wo Bot-Bits in Position n eine 1 haben, hat das Ergebnis eine 1. Am Ende konvertieren Sie zurück.

Zum Beispiel mit diesen Beispielwerten:

0x2222 =  10001000100010
0x000F =  00000000001111
result =  00000000000010   => 0x0002 or just 2
1
clearwater

Zu wissen, wie bitweises UND funktioniert, reicht nicht aus. Ein wichtiger Teil des Lernens ist, wie wir das Gelernte anwenden können. Hier ist ein Anwendungsfall für die Anwendung von bitweisem UND. Beispiel:

Das Hinzufügen einer geraden Zahl in der Binärzahl mit der Binärzahl von 1 führt zu Nullen. Weil alle geraden Zahlen das letzte Bit (von links nach rechts) 0 haben und das einzige Bit, das 1 hat, ist 1 am Ende.

Wenn Sie fragen sollten, schreiben Sie eine Funktion, die ein Argument als Zahl annimmt und für eine gerade Zahl true zurückgibt, ohne Addition, Multiplikation, Division, Subtraktion, Modulo zu verwenden, und Sie können die Zahl nicht in einen String konvertieren.

Diese Funktion ist ein perfekter Anwendungsfall für die Verwendung von bitweisem UND. Wie ich vorher erklärt habe. Du fragst zeigst mir den Code? Hier ist der Code Java.

/**
 * <p> Helper function </p>
 * @param number
 * @return 0 for even otherwise 1
 */

private int isEven(int number){
    return (number & 1);
}
0
supritshah1289