Heim häufiges Problem Wie man die Linksverschiebungs- und Rechtsverschiebungsoperatoren in der C-Sprache versteht

Wie man die Linksverschiebungs- und Rechtsverschiebungsoperatoren in der C-Sprache versteht

Mar 11, 2019 pm 05:28 PM
c语言

Die Linksverschiebung in der C-Sprache stellt den Linksverschiebungsoperator dar, was bedeutet, dass das höchste Bit verworfen und das niedrigste Bit mit 0 gefüllt wird, während die Rechtsverschiebung in der C-Sprache der Rechtsverschiebungsalgorithmus ist, der das Gegenteil der Linksverschiebung ist . Es verschiebt sich ein paar Stellen nach rechts.

Wie man die Linksverschiebungs- und Rechtsverschiebungsoperatoren in der C-Sprache versteht

Verwendung von Linksverschiebungs- und Rechtsverschiebungsoperatoren in der C-Sprache: Der Linksverschiebungsoperator verwirft das höchste Bit und fügt 0 zum niedrigsten Bit hinzu. Rechtsverschiebung Der Algorithmus ist Das Gegenteil von Linksverschiebung besteht darin, ein paar Bits nach rechts zu verschieben

Die Linksverschiebungs- und Rechtsverschiebungsoperatoren in der C-Sprache sind Operatoren in der C-Sprache und werden im Artikel „Anleitung“ ausführlich vorgestellt Die Verwendung dieser beiden Operatoren hat einen gewissen Referenzwert. Ich hoffe, dass sie für alle hilfreich sind >】

Lassen Sie uns zunächst über die Linksverschiebung sprechen. Bei der Linksverschiebung werden alle Bits einer Zahl um eine bestimmte Anzahl von Stellen nach links verschoben. Zum Beispiel:

Mit anderen Worten, die binäre Darstellung von 1 ist 000...0001 (die Anzahl der Nullen vor 1 hängt hier mit der Anzahl der Ziffern in int zusammen. Auf a 32-Bit-Maschine, es gibt 31 in gcc 0), nachdem es um 2 Bits nach links verschoben wurde, wird es 000 ... 0100, was 4 in der Dezimalzahl ist. Daher entspricht das Verschieben von 1 Bit nach links einer Multiplikation mit 2. dann ist das Verschieben von n Bits nach links eine Multiplikation mit 2 hoch n. (Vorzeichenbehaftete Zahlen sind nicht vollständig anwendbar, da die Verschiebung nach links dazu führen kann, dass sich das Vorzeichen ändert. Der Grund wird unten erklärt) Ein Problem, das Aufmerksamkeit erfordert ist, dass das Vorzeichenbit des m-Endes nicht auf dem Bus ganz links vom Typ int gemeldet wird und die Verschiebung nach außen verschoben wird. Wir wissen, dass int eine vorzeichenbehaftete Ganzzahl ist und das ganz linke 1-Bit das Vorzeichenbit ist, das heißt. 0 positiv und 1 negativ. Dann tritt beim Verschieben ein Überlauf auf, zum Beispiel:
int i = 0x40000000; //16进制的40000000,为2进制的01000000...0000
i = i << 1;
Nach dem Login kopieren
Dann, nachdem ich um 1 Bit nach links verschoben wurde, wird es 0x80000000, was 100000 ist... 0000 im Binärformat ist auf 1 gesetzt und die anderen Bits sind alle 0, was der Mindestwert ist, den der int-Typ darstellen kann. Der Wert von 32-Bit int ist -2147483648, was passiert, wenn i wird dann um 1 Bit nach links verschoben? In der C-Sprache wird das höchste Bit verworfen. Nach dem Verwerfen von 1 wird der Wert von i zu 0.

Ein Sonderfall bei der Linksverschiebung ist, dass die Anzahl der Ziffern verschoben wird Wenn links die maximale Anzahl von Ziffern des numerischen Typs überschreitet, verwendet der Compiler die Anzahl der nach links verschobenen Ziffern, um die maximale Anzahl von Ziffern des Typs zu modulieren, und verschiebt sie dann um den Rest, z. B.:


int i = 1, j = 0x80000000; //设int为32位
i = i << 33;   // 33 % 32 = 1 左移1位,i变成2
j = j << 33;   // 33 % 32 = 1 左移1位,j变成0,最高位被丢弃
Nach dem Login kopieren

Beim Kompilieren dieses Programms mit gcc gibt der Compiler eine Warnung aus, die besagt, dass die Anzahl der Linksverschiebungen >= Typlänge ist. Dann werden i und j tatsächlich um 1 Bit verschoben, was dem Rest nach 33 entspricht %32. Dies ist die Regel unter

gcc. Es ist nicht klar, ob andere Compiler gleich sind.

Kurz gesagt, die Linksverschiebung lautet: Verwerfen Sie das höchste Bit und füllen Sie das niedrigste Bit mit 0

Lassen Sie uns über die Rechtsverschiebung sprechen, dann ist die Rechtsverschiebung einfacher zu verstehen.

Rechtsverschiebung Das Konzept ist das Gegenteil der Linksverschiebung um ein paar Bits nach rechts zu verschieben. Durch Verschieben nach rechts bleibt das Vorzeichenbit unverändert, zum Beispiel:

int i = 0x80000000;
i = i >> 1;  //i的值不会变成0x40000000,而会变成0xc0000000
Nach dem Login kopieren

Das heißt, nachdem das Vorzeichenbit nach rechts verschoben wurde , 0 wird für positive Zahlen und 1 für negative Zahlen hinzugefügt, was der arithmetischen Rechtsverschiebung in der Assemblersprache entspricht. Wenn die Anzahl der verschobenen Bits die Länge des Typs überschreitet, wird entsprechend der Rest genommen und dann der Rest wird verschoben.

负数10100110 >>5(假设字长为8位),则得到的是  11111101
Nach dem Login kopieren

Kurz gesagt, in C ist die Linksverschiebung eine logische/arithmetische Linksverschiebung (beide sind genau das Gleiche), die Rechtsverschiebung ist eine arithmetische Rechtsverschiebung, die das Vorzeichenbit behält In tatsächlichen Anwendungen können Sie die Links-/Rechtsverschiebung verwenden, um je nach Situation schnelle Multiplikations-/Divisionsoperationen durchzuführen, was viel effizienter ist als Schleifen

Das obige ist der detaillierte Inhalt vonWie man die Linksverschiebungs- und Rechtsverschiebungsoperatoren in der C-Sprache versteht. 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)

C Sprachdatenstruktur: Datenrepräsentation und Betrieb von Bäumen und Grafiken C Sprachdatenstruktur: Datenrepräsentation und Betrieb von Bäumen und Grafiken Apr 04, 2025 am 11:18 AM

C Sprachdatenstruktur: Die Datenrepräsentation des Baumes und des Diagramms ist eine hierarchische Datenstruktur, die aus Knoten besteht. Jeder Knoten enthält ein Datenelement und einen Zeiger auf seine untergeordneten Knoten. Der binäre Baum ist eine besondere Art von Baum. Jeder Knoten hat höchstens zwei Kinderknoten. Die Daten repräsentieren structTreenode {intdata; structTreenode*links; structTreenode*rechts;}; Die Operation erstellt einen Baumtraversalbaum (Vorbereitung, in Ordnung und späterer Reihenfolge) Suchbauminsertion-Knoten Lösches Knotendiagramm ist eine Sammlung von Datenstrukturen, wobei Elemente Scheitelpunkte sind, und sie können durch Kanten mit richtigen oder ungerechten Daten miteinander verbunden werden, die Nachbarn darstellen.

Die Wahrheit hinter dem Problem der C -Sprachdatei Die Wahrheit hinter dem Problem der C -Sprachdatei Apr 04, 2025 am 11:24 AM

Die Wahrheit über Probleme mit der Dateibetrieb: Dateiöffnung fehlgeschlagen: unzureichende Berechtigungen, falsche Pfade und Datei besetzt. Das Schreiben von Daten fehlgeschlagen: Der Puffer ist voll, die Datei ist nicht beschreibbar und der Speicherplatz ist nicht ausreichend. Andere FAQs: Langsame Dateitraversal, falsche Textdateicodierung und Binärdatei -Leser -Fehler.

Wie man einen Countdown in der C -Sprache ausgibt Wie man einen Countdown in der C -Sprache ausgibt Apr 04, 2025 am 08:54 AM

Wie gibt ich einen Countdown in C aus? Antwort: Verwenden Sie Schleifenanweisungen. Schritte: 1. Definieren Sie die Variable N und speichern Sie die Countdown -Nummer in der Ausgabe. 2. Verwenden Sie die while -Schleife, um n kontinuierlich zu drucken, bis n weniger als 1 ist; 3. Drucken Sie im Schleifenkörper den Wert von n aus; 4. Am Ende der Schleife subtrahieren Sie N um 1, um den nächsten kleineren gegenseitigen gegenseitigen gegenseitigen gegenseitig auszugeben.

C Sprach -Multithread -Programmierung: Ein Anfängerleitfaden und Fehlerbehebung C Sprach -Multithread -Programmierung: Ein Anfängerleitfaden und Fehlerbehebung Apr 04, 2025 am 10:15 AM

C Sprachmultithreading -Programmierhandbuch: Erstellen von Threads: Verwenden Sie die Funktion pThread_create (), um Thread -ID, Eigenschaften und Threadfunktionen anzugeben. Threadsynchronisation: Verhindern Sie den Datenwettbewerb durch Mutexes, Semaphoren und bedingte Variablen. Praktischer Fall: Verwenden Sie Multi-Threading, um die Fibonacci-Nummer zu berechnen, mehrere Threads Aufgaben zuzuweisen und die Ergebnisse zu synchronisieren. Fehlerbehebung: Lösen Sie Probleme wie Programmabstürze, Thread -Stop -Antworten und Leistungs Engpässe.

CS-Woche 3 CS-Woche 3 Apr 04, 2025 am 06:06 AM

Algorithmen sind die Anweisungen zur Lösung von Problemen, und ihre Ausführungsgeschwindigkeit und Speicherverwendung variieren. Bei der Programmierung basieren viele Algorithmen auf der Datensuche und Sortierung. In diesem Artikel werden mehrere Datenabruf- und Sortieralgorithmen eingeführt. Die lineare Suche geht davon aus, dass es ein Array gibt [20.500,10,5,100, 1,50] und die Nummer 50 ermitteln muss. Der lineare Suchalgorithmus prüft jedes Element im Array Eins nach eins nach dem anderen, bis der Zielwert gefunden oder das vollständige Array durchquert wird. Der Algorithmus-Flussdiagramm lautet wie folgt: Der Pseudo-Code für die lineare Suche lautet wie folgt: Überprüfen Sie jedes Element: Wenn der Zielwert gefunden wird: Return Return Falsch C-Sprache Implementierung: #includeIntmain (void) {i

Konzept der C -Sprachfunktion Konzept der C -Sprachfunktion Apr 03, 2025 pm 10:09 PM

C -Sprachfunktionen sind wiederverwendbare Codeblöcke. Sie erhalten Input, führen Vorgänge und Rückgabergebnisse aus, die modular die Wiederverwendbarkeit verbessert und die Komplexität verringert. Der interne Mechanismus der Funktion umfasst Parameterübergabe-, Funktionsausführung und Rückgabeteile. Der gesamte Prozess beinhaltet eine Optimierung wie die Funktion inline. Eine gute Funktion wird nach dem Prinzip der einzigen Verantwortung, der geringen Anzahl von Parametern, den Benennungsspezifikationen und der Fehlerbehandlung geschrieben. Zeiger in Kombination mit Funktionen können leistungsstärkere Funktionen erzielen, z. B. die Änderung der externen Variablenwerte. Funktionszeiger übergeben Funktionen als Parameter oder speichern Adressen und werden verwendet, um dynamische Aufrufe zu Funktionen zu implementieren. Das Verständnis von Funktionsmerkmalen und Techniken ist der Schlüssel zum Schreiben effizienter, wartbarer und leicht verständlicher C -Programme.

C Sprachdatenstruktur: Die Schlüsselrolle von Datenstrukturen in der künstlichen Intelligenz C Sprachdatenstruktur: Die Schlüsselrolle von Datenstrukturen in der künstlichen Intelligenz Apr 04, 2025 am 10:45 AM

C Sprachdatenstruktur: Überblick über die Schlüsselrolle der Datenstruktur in der künstlichen Intelligenz im Bereich der künstlichen Intelligenz sind Datenstrukturen für die Verarbeitung großer Datenmengen von entscheidender Bedeutung. Datenstrukturen bieten eine effektive Möglichkeit, Daten zu organisieren und zu verwalten, Algorithmen zu optimieren und die Programmeffizienz zu verbessern. Gemeinsame Datenstrukturen, die häufig verwendete Datenstrukturen in der C -Sprache sind: Arrays: Eine Reihe von nacheinander gespeicherten Datenelementen mit demselben Typ. Struktur: Ein Datentyp, der verschiedene Arten von Daten zusammen organisiert und ihnen einen Namen gibt. Linked List: Eine lineare Datenstruktur, in der Datenelemente durch Zeiger miteinander verbunden werden. Stack: Datenstruktur, die dem LEST-In-First-Out-Prinzip (LIFO) folgt. Warteschlange: Datenstruktur, die dem First-In-First-Out-Prinzip (FIFO) folgt. Praktischer Fall: Die benachbarte Tabelle in der Graphentheorie ist künstliche Intelligenz

Fehlerbehebungstipps für die Verarbeitung von Dateien in der C -Sprache Fehlerbehebungstipps für die Verarbeitung von Dateien in der C -Sprache Apr 04, 2025 am 11:15 AM

Fehlerbehebungstipps für C -Sprachverarbeitungsdateien Wenn Dateien in der C -Sprache verarbeitet werden, können Sie auf verschiedene Probleme stoßen. Das Folgende sind häufig zu Problemen und entsprechende Lösungen: Problem 1: Der Dateicode kann nicht geöffnet werden: Datei*fp = fopen ("myFile.txt", "r"); if (fp == null) {// Datei Öffnen fehlgeschlagen} Grund} Grund: Dateipfad -Fehler -Datei nicht vorhandener Datei -Read -Lösung vorhanden. Charbuffer [100]; size_tread_bytes = fread (Puffer, 1, Siz