JavaRush /Java-Blog /Random-DE /Einführung in Java-Operatoren: Logisch, Arithmetisch, Bit...

Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise

Veröffentlicht in der Gruppe Random-DE
Lassen Sie uns über Operationen in Java sprechen: numerisch, logisch, bitweise. Dies ist eine theoretische Grundlage, die unbedingt benötigt wird, um das Programmieren zu lernen. Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise - 1

Welche Arten von Operatoren gibt es in Java?

Für jede Operation benötigen wir mindestens zwei Dinge:
  • Operator;
  • Operand.
Ein Beispiel für einen Operator wäre ein einfaches Plus bei der Addition zweier Zahlen. Und die miteinander addierten Zahlen sind in diesem Fall Operanden. Mit Hilfe von Operatoren führen wir also Operationen an einem oder mehreren Operanden durch. Operatoren, die Operationen an zwei Operanden ausführen, werden als binär bezeichnet. Zum Beispiel das Addieren zweier Zahlen. Operatoren, die Operationen an einem einzelnen Operanden ausführen, werden als unär bezeichnet. Zum Beispiel ein unäres Minus.

Java-Operatoren im JavaRush-Kurs

Auf der vierten Ebene der ersten Quest – Java-Syntax – sind mehrere Vorträge den Java-Operatoren gewidmet . Insbesondere bedingte Operatoren wie boolean . Der Kurs enthält 22 Aufgaben, die Ihnen helfen, die Funktionsweise von Vergleichsoperatoren, Bedingungsoperatoren und logischen Operatoren zu verstehen.

Zahlenoperationen in Java

Die häufigste Operation, die Programmierer mit Zahlen durchführen, ist das Zuweisen eines numerischen Werts zu einer Variablen. =Sie ist Ihnen , ebenso wie die Telefonistin, bekannt:
int a = 1;
int b = 2;
int c = 3;
Es gibt auch arithmetische Operationen. Sie werden mit binären Rechenoperatoren durchgeführt:
Tabelle 1. Binäre arithmetische Operatoren
Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise - 2Die ersten vier Operatoren sollten keine Fragen aufwerfen: Alles ist wie in der Mathematik. Auch der letzte Operator, der Rest der Division, macht nichts allzu Kompliziertes. Wenn wir beispielsweise 24 durch 7 dividieren, erhalten wir 3 ganze Zahlen und 3 Rest. Den Rest gibt dieser Operator zurück:
System.out.println(24 % 7); // druckt 3
Hier sind Beispiele von der offiziellen Oracle-Dokumentationsseite: Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise - 3Dieses Programm gibt Folgendes aus: 1 + 2 = 3 3 - 1 = 2 2 * 2 = 4 4 / 2 = 2 2 + 8 = 10 10 % 7 = 3 Java ermöglicht Ihnen kombinieren: zum Beispiel Operatorzuweisungen und arithmetische Operatoren. Schauen wir uns ein Beispiel an:
int x = 0;
x = x + 1; // x = 0 + 1 => x = 1
x = x + 1; // x = 1 + 1 => x = 2
x = x + 1; // x = 2 + 1 => x = 3
Hier haben wir eine Variable definiert xund ihr den Wert Null zugewiesen. Als nächstes weisen wir in jeder Zeile der xSumme aus dem aktuellen Wert der Variablen xund eins einen Wert zu. Zu jeder Zeile gibt es in den Kommentaren Erklärungen. Dieser Vorgang wird als Erhöhen oder Erhöhen einer Variablen bezeichnet. Die Inkrementierungsoperation aus dem obigen Beispiel kann durch eine ähnliche Operation ersetzt werden, indem eine Kombination von Operatoren verwendet wird:
int x = 0;
x += 1; // x = 0 + 1 => x = 1
x += 1; // x = 1 + 1 => x = 2
x += 1; // x = 2 + 1 => x = 3
Sie können den Zuweisungsoperator mit jedem arithmetischen Operator kombinieren:
int x = 0;
x += 10; // x = 0 + 10 => x = 10
x -= 5; // x = 10 - 5 => x = 5
x *= 5; // x = 5 * 5 => x = 25
x /= 5; // x = 25 / 5 => x = 5
x %= 3; // x = 5 % 3 => x = 2;
Lassen Sie uns demonstrieren, wie das letzte Beispiel funktioniert:
Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise - 4
Zusätzlich zu den binären Operatoren verfügt Java über unäre arithmetische Operatoren.
Tabelle 2. Unäre arithmetische Operatoren:
Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise - 4Beispiel für unäres Plus und Minus:
int x = 0;
x = (+5) + (+15); // Klammern zur Verdeutlichung, es geht ohne sie
System.out.println("x = " + x);

int y = -x;
System.out.println("y = " + y);
Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise - 6
Die Inkrementierungs- und Dekrementierungsoperationen sind im Wesentlichen einfach. Im ersten Fall wird die Variable um 1 erhöht, im zweiten Fall wird die Variable um 1 verringert. Das Beispiel ist unten:
int x = 9;
x++;
System.out.println(x); // 10

int y = 21;
y--;
System.out.println(y); // 20
Es gibt zwei Arten dieser Operationen: Postfix und Präfix. Im ersten Fall wird der Operator hinter die Variable geschrieben, im zweiten Fall vor der Variablen. Der einzige Unterschied besteht darin, wann die Inkrementierungs- oder Dekrementierungsoperation ausgeführt wird. Beispiel und Beschreibung in der folgenden Tabelle. Nehmen wir an, wir haben eine Variable:
int a = 2;
Dann:
Tabelle 3. Inkrement-Dekrement-Operatoren:
Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise – 5Demonstration:
Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise - 8
Neben der Arithmetik gibt es Vergleichsoperationen (zweier Zahlen). Das Ergebnis ist immer wahr oder falsch ( wahr / falsch ).
Tabelle 4. Vergleichsoperatoren
Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise - 9Beispiele:
int a = 1;
int b = 2;

boolean comparisonResult = a == b;
System.out.println("a == b :" + comparisonResult);

comparisonResult = a != b;
System.out.println("a != b :" + comparisonResult);

comparisonResult = a > b;
System.out.println("a >  b :" + comparisonResult);

comparisonResult = a >= b;
System.out.println("a >= b :" + comparisonResult);

comparisonResult = a < b;
System.out.println("a <  b :" + comparisonResult);

comparisonResult = a <= b;
System.out.println("a <= b :" + comparisonResult);
Demonstration:
Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise – 10

Logische Operationen in Java

Schauen wir uns die logischen Operationen und Wahrheitstabellen von jedem von ihnen an:
  • Negationsoperation ( NOT);
  • Konjunktionsoperation, logisches UND ( AND);
  • Disjunktionsoperation, logisches ODER ( OR);
  • Modulo-Additionsoperation, Exklusiv-ODER ( XOR).
Der Negationsoperator ist unär und gilt für einen einzelnen Operanden. Alle anderen Operationen sind binär. Betrachten wir die Wahrheitstabellen dieser Operationen. Hier ist 0 das Äquivalent von false in Java und 1 das Äquivalent von true .
Tabelle 5. Wahrheitstabelle des Negationsoperators (NOT)
Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise - 7
Tabelle 6. Wahrheitstabelle des Konjunktionsoperators (AND)
Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise - 8
Tabelle 7. Wahrheitstabelle des Disjunktionsoperators (OR)
Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise - 9
Tabelle 8. Wahrheitstabelle des Modulo-Additionsoperators (XOR)
Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise – 10Java hat die gleichen logischen Operationen:
  • !— Negationsoperator;
  • &&— logischer UND-Operator (kurz);
  • ||— logischer ODER-Operator (kurz);
  • &— bitweiser UND-Operator;
  • |— bitweiser ODER-Operator;
  • ^– bitweiser Exklusiv-ODER-Operator.
Schauen wir uns etwas weiter unten den Unterschied zwischen bitweisen und Kurzoperatoren an und konvertieren wir gleichzeitig alle Wahrheitstabellen in Java-Code:
public class LogicDemo {

   public static void main(String[] args) {
    notExample();
    andExample();
    orExample();
    xorExample();
   }

   public static void notExample() {
    System.out.println("NOT EXAMPLE:");
    System.out.println("NOT false = " + !false);
       System.out.println("NOT true  = " + !true);
    System.out.println();
   }

   public static void andExample() {
    System.out.println("AND EXAMPLE:");
    System.out.println("false AND false = " + (false & false));
    System.out.println("false AND true  = " + (false & true));
    System.out.println("true  AND false = " + (true & false));
    System.out.println("true  AND true  = " + (true & true));
    System.out.println();
   }

   public static void orExample() {
    System.out.println("OR EXAMPLE:");
    System.out.println("false OR false = " + (false | false));
    System.out.println("false OR true  = " + (false | true));
    System.out.println("true  OR false = " + (true | false));
     System.out.println("true  OR true  = " + (true | true));
    System.out.println();
   }

   public static void xorExample() {
    System.out.println("XOR EXAMPLE:");
    System.out.println("false XOR false = " + (false ^ false));
    System.out.println("false XOR true  = " + (false ^ true));
    System.out.println("true  XOR false = " + (true ^ false));
    System.out.println("true  XOR true  = " + (true ^ true));
    System.out.println();
   }
}
Dieses Programm zeigt Folgendes an: KEIN BEISPIEL: NICHT falsch = wahr NICHT wahr = falsch UND BEISPIEL: falsch UND falsch = falsch falsch UND wahr = falsch wahr UND falsch = falsch wahr UND wahr = wahr ODER BEISPIEL: falsch ODER falsch = falsch falsch ODER wahr = wahr wahr ODER falsch = wahr wahr ODER wahr = wahr XOR BEISPIEL: falsch XOR falsch = falsch falsch XOR wahr = wahr wahr XOR falsch = wahr wahr XOR wahr = falsch Logische Operatoren gelten nur für booleanVariablen. In unserem Fall haben wir sie direkt auf Werte angewendet, Sie können sie aber auch mit booleanVariablen verwenden:
Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise – 15
Und zu booleanden Ausdrücken:
Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise - 16
Jetzt haben wir Kurzoperatoren ( &&, ||) und ähnliche bitweise Operatoren ( &, |). Was ist der Unterschied zwischen ihnen? Erstens kann bitweise auf ganze Zahlen angewendet werden. Wir werden etwas später darüber sprechen. Und zweitens werden einige abgekürzt, andere nicht. Um zu verstehen, wie eine Abkürzung aussieht, schauen wir uns den Ausdruck an:

false AND x = ?
true OR x = ?
Dies xkann einen beliebigen booleschen Wert annehmen. Und im Allgemeinen ist das Ergebnis des ersten Ausdrucks gemäß den Gesetzen der Logik und den Wahrheitstabellen unabhängig davon, ob es x wahr oder falsch ist, falsch und das Ergebnis des zweiten Ausdrucks wahr . Sehen.
Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise - 17
Manchmal kann das Ergebnis eines Ausdrucks aus dem ersten Operanden berechnet werden. &&Das ist es, was die abgekürzten Operatoren und auszeichnet ||. In Ausdrücken, die den oben beschriebenen ähneln, wird der Wert des zweiten Operanden nicht ausgewertet. Hier ein kleines Beispiel:
Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise - 18
Bei Kurzoperatoren wird der zweite Teil des Ausdrucks nicht ausgewertet. Dies geschieht jedoch nur, wenn das Ergebnis des Ausdrucks bereits aus dem ersten Operanden ersichtlich ist.

Bitweise Operationen in Java

Nun kommen wir zum interessantesten Teil: bitweise Operationen. Wie der Name schon sagt, handelt es sich hierbei um Operationen, die an Bits ausgeführt werden. Doch bevor wir uns mit diesem Thema befassen, lohnt es sich, über verwandte Bereiche zu sprechen.

Darstellung von Zahlen im binären Zahlensystem

Zahlen werden wie alle anderen Informationen in einem Programm im Binärcode im Computerspeicher gespeichert. Binärcode ist eine Menge von Nullen und Einsen. Jede Null oder Eins stellt eine Informationseinheit dar, die als Bit bezeichnet wird.

Laut Wikipedia:

Ein Bit (aus dem Englischen Binary Digit – Binärzahl; auch Wortspiel: Englisch Bit – Stück, Teilchen) ist eine Maßeinheit für die Informationsmenge. 1 Informationsbit ist ein Symbol oder Signal, das zwei Bedeutungen annehmen kann: ein oder aus, ja oder nein, hoch oder niedrig, geladen oder ungeladen; im Binärsystem ist es 1 (Eins) oder 0 (Null).

Mit welchen Daten arbeiten bitweise Operatoren?

Bitweise Operationen werden in Java nur für Ganzzahlen ausgeführt. Ganzzahlen werden im Computerspeicher als Satz von Bits gespeichert. Wir können sagen, dass ein Computer jede Information in ein binäres Zahlensystem (eine Menge von Bits) umwandelt und erst dann damit interagiert. Doch wie funktioniert das binäre Zahlensystem? Im dezimalen Zahlensystem haben wir nur 10 Symbole: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Wir verwenden diese Symbole zum Zählen. Nach 9 kommt 10, nach 19 - 20, nach 99 - 100, nach 749 - 750. Das heißt, wir verwenden eine Kombination der verfügbaren 10 Symbole und können damit „von Null bis Mittag“ zählen. Im binären Zahlensystem gibt es statt zehn Symbolen nur zwei – 0, 1. Aber indem wir diese Symbole nach dem gleichen Prinzip wie im Dezimalsystem kombinieren, können wir unendlich zählen.
Lassen Sie uns das Zählen von 0 bis 15 dezimal und binär demonstrieren:
Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise – 11Wie Sie sehen, ist alles nicht so kompliziert. Neben Bits gibt es noch andere bekannte Informationseinheiten – Bytes , Kilobytes , Megabytes , Gigabytes usw. Sie wissen wahrscheinlich, dass 1 Byte 8 Bits enthält . Was bedeutet das? Das bedeutet, dass 8 Bits hintereinander 1 Byte belegen. Hier sind Beispiele dafür, was Bytes sein können:

00000000 - 1 Byte
10110010 - 1 Byte
01011011 - 1 Byte
Die Anzahl der möglichen sich nicht wiederholenden Bitkombinationen in einem Byte beträgt 256 (2 8 = 256). Aber kehren wir näher zu Java zurück. Es gibt einen solchen ganzzahligen Datentyp - byte. Dieser Typ kann Werte von -128 bis 127 annehmen und eine Zahl im Computerspeicher belegt genau 8 Bit oder 1 Byte. Eine Nummer dieses Typs belegt genau 1 byteComputerspeicher. Und hier stimmen die Namen nicht zufällig überein. Wie wir uns erinnern, kann 1 Byte 256 verschiedene Werte speichern. Und eine Typnummer bytekann 256 verschiedene Werte annehmen (128 negative, 127 positive und 1 Null). Jeder Zahlenwert byteverfügt über einen eindeutigen Satz von acht Bits. Dies ist nicht nur beim Typ der Fall byte, sondern bei allen ganzzahligen Typen. Der Typ bytewird beispielhaft als der kleinste angegeben. Die folgende Tabelle zeigt alle Java-Integer-Typen und den von ihnen belegten Speicherplatz: Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise – 12Betrachten Sie den Typ int. Es können 2147483648 negative Werte, 2147483647 positive Werte und eine Null gespeichert werden. Gesamt:

2147483648 + 2147483647 + 1 = 4294967296.
Dieser Typ belegt 32 Bit im Computerspeicher. Die Anzahl der möglichen Kombinationen aus einer Menge von 32 Nullen und Einsen beträgt:
232 = 4294967296.
Die gleiche Zahl wie die Anzahl der Werte, die der Typ enthalten kann int. Dies ist lediglich eine Demonstration der Beziehung zwischen dem Wertebereich eines Datentyps und seiner Größe (Anzahl der Bits im Speicher). Jede beliebige Zahl eines beliebigen Typs in Java kann in eine Binärzahl konvertiert werden. Sehen wir uns an, wie einfach dies mit der Java-Sprache möglich ist. Wir werden am Beispiel von type lernen int. Dieser Typ hat seine eigene Wrapper-Klasse – Integer. Und er hat einen toBinaryString, der die ganze Arbeit für uns erledigt:
Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise - 21
Voila – es ist nicht so kompliziert. Aber dennoch muss etwas geklärt werden. intDie Zahl benötigt 32 Bit. Aber wenn wir im obigen Beispiel die Zahl 10 ausgeben, sehen wir in der Konsole 1010. Das liegt daran, dass führende Nullen nicht gedruckt werden. Wenn sie angezeigt würden, würden wir in der Konsole anstelle von 1010 00000000000000000000000000001010 sehen. Der besseren Lesbarkeit halber werden jedoch alle führenden Nullen weggelassen. Nicht so schwer, bis Sie sich fragen: Was ist mit negativen Zahlen? Es nimmt Informationen nur im Binärsystem wahr. Es stellt sich heraus, dass auch das Minuszeichen im Binärcode geschrieben werden muss. Dies kann mit direktem oder komplementärem Code erfolgen.

Direkter Code

Eine Methode zur Darstellung von Zahlen im binären Zahlensystem, bei der das höchstwertige Bit (das Bit ganz links) dem Vorzeichen der Zahl zugeordnet wird. Wenn die Zahl positiv ist, wird das Bit ganz links als 0 geschrieben, wenn sie negativ ist - 1.
Schauen wir uns das am Beispiel einer 8-Bit-Zahl an:
Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise - 13Der Ansatz ist einfach und grundsätzlich verständlich. Es hat jedoch Nachteile: Schwierigkeiten bei der Durchführung mathematischer Operationen. Zum Beispiel durch die Addition negativer und positiver Zahlen. Sie können ohne zusätzliche Manipulationen nicht gefaltet werden.

Zusätzlicher Code

Durch die Verwendung von zusätzlichem Code können Sie die Nachteile von Direktcode vermeiden. Es gibt einen einfachen Algorithmus, um den Zusatzcode einer Zahl zu erhalten. Versuchen wir, den zusätzlichen Code für die Zahl -5 zu erhalten. Stellen wir diese Zahl mit dem Zweierkomplementcode im binären Zahlensystem dar. Schritt 1. Wir erhalten eine Darstellung einer negativen Zahl mit direktem Code. Für -5 ist es 10000101. Schritt 2. Invertieren Sie alle Ziffern außer der Vorzeichenziffer. Ersetzen wir alle Nullen durch Einsen und Einsen überall mit Ausnahme des ganz linken Bits durch Nullen.

10000101 => 11111010
Schritt 3. Addieren Sie eins zum resultierenden Wert:

11111010 + 1 = 11111011
Bereit. Wir haben den Wert -5 im binären Zahlensystem mithilfe des Zweierkomplementcodes erhalten. Dies ist wichtig für das Verständnis des folgenden Materials, da Java Zweierkomplementcode verwendet, um negative Zahlen in Bits zu speichern.

Arten von bitweisen Operationen

Nachdem wir uns nun mit allen Einführungen befasst haben, sprechen wir über bitweise Operationen in Java. Eine bitweise Operation wird für Ganzzahlen ausgeführt und ihr Ergebnis ist eine Ganzzahl. Dabei wird die Zahl in eine Binärzahl umgewandelt, für jedes Bit wird eine Operation ausgeführt und das Ergebnis wird wieder in eine Dezimalzahl umgewandelt. Die Liste der Operationen finden Sie in der folgenden Tabelle: Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise - 14Wie wir bereits herausgefunden haben, können Zahlen als eine Menge von Bits dargestellt werden. Bitweise Operationen führen Operationen für genau jedes Bit einer solchen Darstellung durch. Lass uns nehmen NOT, AND, OR, XOR. Denken Sie daran, dass wir uns kürzlich Wahrheitstabellen nur für logische Operanden angesehen haben. In diesem Fall werden auf jedes Bit der Ganzzahl dieselben Operationen angewendet.

Bitweiser unärer Operator NICHT ~

Dieser Operator ersetzt alle Nullen durch Einsen und alle Einsen durch Nullen. Nehmen wir an, wir haben die Zahl 10 in Dezimalschreibweise. Binär ist diese Zahl 1010. Wenn wir den unären bitweisen Negationsoperator auf diese Zahl anwenden, erhalten wir etwa Folgendes: Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise – 15Schauen wir uns an, wie es im Java-Code aussieht:
public static void main(String[] args) {
   int a = 10;

   System.out.println(" a = " + a + "; binary string: " + Integer.toBinaryString(a));
   System.out.println("~a = " + ~a + "; binary string: " + Integer.toBinaryString(~a));
}
Schauen wir uns nun an, was in der Konsole angezeigt wird:
Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise – 25
In der ersten Zeile erhalten wir den Wert im Binärzahlensystem ohne führende Nullen. Auch wenn wir sie nicht sehen, sind sie da. Dies wird durch die zweite Zeile belegt, in der alle Bits in umgekehrte umgewandelt wurden. Deshalb sehen wir so viele führende Einheiten. Dabei handelt es sich um ehemalige führende Nullen, die vom Compiler beim Drucken in der ersten Zeile ignoriert wurden. Hier ist ein kleines Programm, das der Übersichtlichkeit halber auch führende Nullen anzeigt.
Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise - 26

Bitweiser UND-Operator

Dieser Operator gilt für zwei Zahlen. Es führt eine Operation ANDzwischen den Bits jeder Zahl durch. Schauen wir uns ein Beispiel an: Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise - 16Diese Operation wird an zwei Zahlen ausgeführt. Beispiel im Java-Code:
Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise - 28

Bitweiser ODER-Operator

OR gilt für zwei Zahlen. Es führt eine ODER-Verknüpfung zwischen den Bits jeder Zahl durch: Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise - 17Schauen wir uns nun an, wie dies in IDEA aussehen würde:
Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise – 30

Bitweise Operation, exklusives ODER (XOR)

Schauen wir uns das gleiche Beispiel an, aber mit einer neuen Operation: Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise - 18Beispielcode:
Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise - 32

Bitweise Verschiebung nach links

Dieser Operator ist auf zwei Operanden anwendbar, d. h. bei der Operation verschieben sich die Positionen x << yder Bits der Zahl nach links. Was bedeutet das? Schauen wir uns das Beispiel der Operation an. Das Ergebnis der Operation ist die Zahl 20 im Dezimalsystem. Wie Sie dem Diagramm oben entnehmen können, werden alle Bits um 1 nach links verschoben. Bei diesem Vorgang geht der Wert des höchstwertigen Bits (das Bit ganz links) verloren. Und das niedrigstwertige Bit (das Bit ganz rechts) wird mit Null gefüllt. Was können Sie zu dieser Operation sagen? xy10 << 1 Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise - 19
  1. Indem wir die Bits einer Zahl bitweise nach links verschieben X, Nmultiplizieren wir die Zahl Xmit 2 N .

    Hier ist ein Beispiel:

    Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise - 34
  2. Aber! Das Vorzeichen der Zahl kann sich ändern, wenn das Bit mit dem Wert 1 die Position ganz links einnimmt.

  3. Wenn Sie auf unbestimmte Zeit nach links verschieben, wird die Zahl einfach zu 0. Lassen Sie uns die Punkte 2 und 3 demonstrieren:

    Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise – 35

Bitweise Verschiebung nach rechts

Dieser Operator gilt für zwei Operanden. Diese. Bei der Operation verschieben sich die Positionen x >> yder Bits der Zahl nach rechts. Schauen wir uns ein anderes Beispiel an. Lassen Sie uns den Vorgang schematisch analysieren . Verschieben wir alle Bits der Zahl 10 um eine Position nach rechts: Bei der Schiebeoperation verlieren wir die rechten Bits. Sie verschwinden einfach. Das Bit ganz links ist das Vorzeichen der Zahl (0 ist positiv, 1 ist negativ). Daher wird er im Endwert genauso platziert wie in der ursprünglichen Zahl. Beispiel mit einer negativen Zahl: Das Bit ganz rechts geht verloren und das Bit ganz links wird von der Originalzahl kopiert, als Ehrenzeichen der Zahl. Wie macht man das alles in IDEA? Im Prinzip nichts Kompliziertes, einfach hinnehmen und verschieben: xy10 >> 1Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise – 20Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise - 21
Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise - 38
Jetzt. Was können Sie zu den nach rechts verschobenen Zahlen sagen? Sie sind durch 2 teilbar. Jedes Mal, wenn wir ein Bit nach rechts verschieben, teilen wir die ursprüngliche Zahl durch 2. Wenn die Zahl nicht durch 2 teilbar ist, wird das Ergebnis in Richtung minus Unendlich (nach unten) gerundet. Aber das funktioniert nur, wenn wir die Bits genau um 1 verschieben. Und wenn durch 2 Bits, dividieren Sie durch 4. Durch 3 Bits, dividieren Sie durch 8. Durch 4 Bits, dividieren Sie durch 16. Sehen Sie? Potenzen von 2... Wenn wir eine Zahl bitweise Xnach rechts verschieben, dividieren wir die Zahl durch 2 hoch 2 . Demonstration: NXN
public class BitOperationsDemo {

   public static void main(String[] args) {

    for (int i = 1; i <= 10; i++) {

        int shiftOperationResult = 2048 >> i;
        int devideOperationResult = 2048 / (int) Math.pow(2, i);


           System.out.println(shiftOperationResult + " - " + devideOperationResult);
    }

   }

}
Was ist denn hier los?
  1. Eine Schleife, in der die Variable i von 1 auf 10 erhöht wird.

  2. Bei jeder Iteration berechnen wir zwei Werte:
    • Wir schreiben in die Variable shiftOperationResultdas Ergebnis der Verschiebung der Zahl 2048 um i Bits nach rechts;

    • devideOperationResultWir schreiben das Ergebnis der Division der Zahl 2048 durch 2 hoch i in eine Variable .

  3. Wir zeigen die beiden erhaltenen Werte paarweise an.

Das Ergebnis der Programmausführung ist wie folgt: 1024 - 1024 512 - 512 256 - 256 128 - 128 64 - 64 32 - 32 16 - 16 8 - 8 4 - 4 2 - 2

Bitweise Rechtsverschiebung mit Nullauffüllung

Während bei einer normalen Rechtsverschiebung das Vorzeichen der Zahl erhalten bleibt (das höchstwertige Bit behält seinen Wert), ist dies bei einer Rechtsverschiebung mit Nullfüllung nicht der Fall. Und das höchstwertige Bit ist mit Null gefüllt. Mal sehen, wie es aussieht: Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise - 22

Vorrang von Operationen in Java

Wie in der Mathematik hat Java Vorrang vor Operationen. Die folgende Tabelle zeigt die Priorität (von der höchsten zur niedrigsten) der von uns berücksichtigten Vorgänge. Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise - 23

Nützliche Anwendungsbeispiele

Bestimmung der Parität einer Zahl

Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise – 24

Finden des maximalen Elements in einem Array

Einführung in Java-Operatoren: Logisch, Arithmetisch, Bitweise – 25Um das minimale Element zu finden, ändern Sie einfach das Vergleichszeichen an der richtigen Stelle.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION