Inhaltsverzeichnis
Bitweise Operationen
Code-Demonstration
Code
Ergebnis
Anwendung von Bitoperationen
Heim Java javaLernprogramm Beispielcode-Analyse für Java-Bit-Operationen

Beispielcode-Analyse für Java-Bit-Operationen

Apr 23, 2023 pm 01:52 PM
java

Bitweise Operationen

Bitweise Operationen habe ich schon vor langer Zeit gelernt, aber ich habe sie schon so lange nicht mehr verwendet, dass ich das Gefühl habe, sie fast vergessen zu haben. Ich habe mir kürzlich ein paar Codes für Bitarithmetik angeschaut und festgestellt, dass ich sie nicht alle verstehen konnte, haha. Es ist Zeit, zurückzukommen und sich über die Grundlagen zu informieren.

Alle Zahlen im Programm werden in binärer Form im Computerspeicher gespeichert. Bei Bitoperationen werden die Binärbits von Ganzzahlen im Speicher direkt bearbeitet.

Operatoren für bitweise Operationen:

~Stück für Stück Negieren ^bitweise t;>Vorzeichenlose Rechtsverschiebung

Dies sind sehr grundlegende Kenntnisse, aber wenn Sie sie nicht zu lange verwenden, werden Sie sie unweigerlich vergessen. Sie können sie beim Codieren häufiger verwenden!

Sprechen ist günstig, zeigen Sie mir den Code.

Hinweis: Es ist wirklich schwierig, die Anwendung zu erkennen, wenn Sie diese allein besprechen. Wenn etwas nicht klar ist, können Sie sich die Zusammenfassungen anderer Leute ansehen.

Sehen wir uns die Anwendung von Bitoperationen mit einem Code an:

public final void writeInt(int v) throws IOException {
	  out.write((v >>> 24) & 0xFF);
	  out.write((v >>> 16) & 0xFF);
	  out.write((v >>>  8) & 0xFF);
	  out.write((v >>>  0) & 0xFF);
	  incCount(4);
}
Nach dem Login kopieren

Dieser Code ist DataOutputStream 类中的一个方法,用于将一个 int 型的整数写入流中。这个方法的命名是很有意思的,它和 OutputStream 中的 public abstract void write(int b) throws IOException Diese Methode ist völlig anders. Die Parameter dieser Methode scheinen darauf hinzuweisen, dass sie eine Ganzzahl in den Stream schreiben kann, die Funktion der Methode wird jedoch nicht erraten, sondern hängt von der Beschreibung der Methode ab. Einführung in

public abstract void write(int b) throws IOException
Nach dem Login kopieren

API:

Schreibt das angegebene Byte in diesen Ausgabestream. Der allgemeine Vertrag für write besteht darin, dass ein Byte in den Ausgabestream geschrieben wird das Argument b Die 24 höherwertigen Bits von b werden ignoriert.

Es schreibt ein bestimmtes Byte in den Stream. Wir wissen, dass eine int-Variable 32 Bits und ein Byte 8 Bits belegt, also das letzte 8 Bits einer Ganzzahl vom Typ int kleiner als 256 (2^8) und eine Ganzzahl vom Typ Byte sind gleich.

Diese Methode besteht also darin, die niedrigsten 8 Bits einer int-Variablen zu schreiben und die restlichen 24 Bits zu ignorieren. Seien Sie bei dieser Methode besonders vorsichtig!

Das zu schreibende Byte sind die acht niederwertigen Bits des Arguments b. Die 24 höherwertigen Bits von b werden ignoriert.

Schreiben Sie also eine int-Variable vollständig im Fluss ist kein sehr einfaches Problem. Kehren wir zum obigen Code zurück: Er wird viermal hintereinander geschrieben, wobei jedes Mal ein Datenbyte geschrieben wird. Auf diese Weise wird eine Variable vom Typ int in 4 Bytes umgewandelt und in den Stream geschrieben.

out.write((v >>> 24) & 0xFF); Diese Methode dient zum Schreiben der unteren 8-stelligen Zahl oben. Diese spezifische Implementierung wird von der entsprechenden Unterklasse bereitgestellt.

Schauen wir uns das Diagramm an: Eine einfache UND-Operation: Es ist ersichtlich, dass das Ergebnis der Operation die unteren 8 Bits beibehält. Dies ist das Ergebnis von (v>>>24) & 0xFF Betrieb.

Beispielcode-Analyse für Java-Bit-Operationen

Wie erhält man also den hohen 8-Bit-Wert? Dies erfordert die Verwendung von Schiebeoperationen:

Beispielcode-Analyse für Java-Bit-Operationen

Durch die Schiebeoperation können Sie alle 8-Bit-Daten abrufen und dann die bitweise UND-Operation ausführen, um eine Ganzzahl vollständig in den Fluss zu schreiben.

Code-Demonstration

Code
package dragon;

/**
 * 分析这一个方法,目前水平有限,先从最简单的做起!
 * */

//		   public final void writeInt(int v) throws IOException {
//        out.write((v >>> 24) & 0xFF);
//        out.write((v >>> 16) & 0xFF);
//        out.write((v >>>  8) & 0xFF);
//        out.write((v >>>  0) & 0xFF);
//        incCount(4);
//    }


//上面这段代码是将一个32位整型,写入输出流。
//并且是将32位整型分为4个部分,每次写入8位。
//这是Java的特性。


public class DataOutputStreamAnalysis {
	public static void main(String[] args) {
		DataOutputStreamAnalysis analysis = new DataOutputStreamAnalysis();
		analysis.analysis(65535);
	}
	
	public void analysis(int number) {
		int number1, number2, number3, number4;  //后面的数字表示是一个32位整型的第几个8位。
		number1 = (number >>> 24) & 0xFF;    
		number2 = (number >>> 16) & 0xFF;    
		number3 = (number >>> 8) & 0xFF;
		number4 = (number >>> 0) & 0xFF;
		
		
		
		System.out.println(this.format(Integer.toBinaryString(number))+"  原始数据"); 
		System.out.println(this.format(Integer.toBinaryString(number1))+"  原始数据第一个8位");
		System.out.println(this.format(Integer.toBinaryString(number2))+"  原始数据第二个8位");
		System.out.println(this.format(Integer.toBinaryString(number3))+"  原始数据第三个8位");
		System.out.println(this.format(Integer.toBinaryString(number4))+"  原始数据第四个8位");
	}
	
	/**
	 * 输入一个二进制字符串,将其格式化,因为整型是
	 * 占32位的,但是转换成的二进制字符串,并没有32位*/
	public String format(String bstr) {
		int len = bstr.length();
		StringBuilder sb = new StringBuilder(35);
		for (int i = 0; i < 32-len; i++) {
			sb.append("0");
		}
		sb.append(bstr);
		sb.insert(8, " ");
		sb.insert(17, " ");
		sb.insert(26, " ");   //前面插入一个字符后,所有字符的索引都变了!
		return sb.toString();
	}
}
Nach dem Login kopieren
Ergebnis

Beispielcode-Analyse für Java-Bit-Operationen

Erläuterung: Der Fall negativer Zahlen wird hier nicht berücksichtigt, aber sie sind alle gleich, außer dass der Ausdruck negativer Zahlen etwas schwieriger ist. Solange Sie positive Zahlen verstehen, sind negative Zahlen kein Problem.

Anwendung von Bitoperationen

1. Bestimmen Sie, ob die Variable vom Typ int ist

if (x & 1 ==0) 
	System.out.println("x是偶数");
if (x & 1 == 1) 
    System.out.println("x是奇数");
Nach dem Login kopieren
Erklärung: Dies ist immer noch leicht zu verstehen, da die letzte Verschiebung gerader Zahlen 0 sein muss. (Binäre Darstellung)

2. Nehmen Sie das k-te Bit der Variablen vom Typ int

Ausdruck: x >> k & 1 (Es wird empfohlen, Klammern hinzuzufügen, um es klarer zu machen.)

3 Setzen Sie die k-te Position der Variablen vom Typ int auf 1 Verschieben Sie 1 auf um k Bits links und führen Sie dann eine logische ODER-Verknüpfung mit der Variablen x durch. Dann wird das k-te Bit der Variablen x auf 1 gesetzt und die anderen Bits bleiben unverändert.

Ausdruck: x = x |. (1

4. Löschen Sie das k-te Bit der Variable vom Typ int auf 0 Verschieben Sie 1 um k Bits nach links, invertieren Sie die Ergebnisse, und die Ergebnisse summieren. Wenn eine logische Operation unter der Variablen ausgeführt wird, wird das k-te Bit der Variablen x auf 0 gelöscht und die anderen Bits bleiben unverändert.

Ausdrucksbits: x = x & ~(1

5. Berechnen Sie den Durchschnitt zweier Ganzzahlen

Ausdrucksbits: (x & y) + ((x ^ y) > Formel: x = x

Zum Beispiel: Erweitern Sie x um das 2-fache: x = x

Der Grund, warum bitweise Operationen empfohlen werden:

Bitweise Operationen sind schneller als arithmetische Operationen, da bitweise Operationen weniger Anweisungen erfordern und weniger Zeit für die Ausführung benötigen. Sie scheinen sehr schnell zu sein, aber die Vorteile bitweiser Operationen zeigen sich erst, wenn eine große Anzahl von Ausführungen durchgeführt wird. Schließlich werden die Computer von heute immer schneller.

Operator Bedeutung
& bitweise UND
| bitweise

Das obige ist der detaillierte Inhalt vonBeispielcode-Analyse für Java-Bit-Operationen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Quadratwurzel in Java Quadratwurzel in Java Aug 30, 2024 pm 04:26 PM

Leitfaden zur Quadratwurzel in Java. Hier diskutieren wir anhand eines Beispiels und seiner Code-Implementierung, wie Quadratwurzel in Java funktioniert.

Perfekte Zahl in Java Perfekte Zahl in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Zufallszahlengenerator in Java Zufallszahlengenerator in Java Aug 30, 2024 pm 04:27 PM

Leitfaden zum Zufallszahlengenerator in Java. Hier besprechen wir Funktionen in Java anhand von Beispielen und zwei verschiedene Generatoren anhand ihrer Beispiele.

Weka in Java Weka in Java Aug 30, 2024 pm 04:28 PM

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Smith-Nummer in Java Smith-Nummer in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

Fragen zum Java Spring-Interview Fragen zum Java Spring-Interview Aug 30, 2024 pm 04:29 PM

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Brechen oder aus Java 8 Stream foreach zurückkehren? Brechen oder aus Java 8 Stream foreach zurückkehren? Feb 07, 2025 pm 12:09 PM

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

Zeitstempel für Datum in Java Zeitstempel für Datum in Java Aug 30, 2024 pm 04:28 PM

Anleitung zum TimeStamp to Date in Java. Hier diskutieren wir auch die Einführung und wie man Zeitstempel in Java in ein Datum konvertiert, zusammen mit Beispielen.

See all articles