Python Programm zum Vertauschen zweier Zahlen ohne Verwendung einer dritten Variable

⚡ Intelligente Zusammenfassung

Tauschping Zwei Zahlen ohne dritte Variable werden mithilfe arithmetischer Addition und Subtraktion direkt vertauscht.traction, der bitweise XOR-Operator oder Tricks der Bitarithmetik. Python kann auch direkt mit Tupel-Entpackung vertauscht werden.

  • 🔘 Klassische Methode: Der übliche Tauschvorgang speichert einen Wert in einer temporären Variable, was durch diese Techniken vermieden wird.
  • Arithmetischer Tausch: Vertausche die Werte mit a = a + b, dann b = a − b, dann a = a − b.
  • 🔀 XOR-Tausch: Wende den bitweisen XOR-Operator dreimal an, um ganze Zahlen ohne Überlauf zu vertauschen.
  • 🧮 Bitweise Arithmetik: Verwenden Sie die Operatoren UND, ODER und Komplement, um Addition und Subtraktion nachzubilden.traction.
  • 🐍 Python Abkürzung: Beim Tupel-Entpacken, a, b = b, a, werden zwei beliebige Werte in einer Zeile vertauscht.
  • 🤖 KI und Daten: Tupeltausch und NumPy-Indexierung zur Neuordnung von Array-Elementen in der Vorbereitung von maschinellem Lernen.

Zwei tauschen Numbers Ohne Verwendung einer dritten Variable

In den folgenden Abschnitten werden vier Möglichkeiten zum Tauschen ohne temporäre Variable sowie der arithmetische Überlauf behandelt.

In Programmiersprachen, Tauschping Das bedeutet, die Werte zweier Variablen zu vertauschen. Eine Variable kann eine Zahl, eine Zeichenkette, eine Liste oder ein Array, ein Objekt usw. enthalten. Die allgemeine Vorgehensweise beim Vertauschen ist…ping Dabei wird eine temporäre Variable verwendet, um Werte zu speichern. Zum Beispiel:

Zwei tauschen Numbers

Die allgemeinen Schritte des Tauschsping Die beiden Zahlen lauten:

  • Deklariere eine temporäre Variable C
  • Weisen Sie C den Wert von A zu, was bedeutet, dass C = A ist. Jetzt ist C = 20
  • Weisen Sie A den Wert von B zu, also A = 30
  • Weisen Sie B den Wert von C zu, also ist B = 20, da C den Wert 20 hat.

So funktioniert der Tausch.ping Dies geschieht mithilfe einer temporären Variable und funktioniert sowohl für Ganzzahlen als auch für Gleitkommazahlen.

Tauschen Sie mithilfe der arithmetischen Gleichung

Wie wir wissen, Tauschping Vertauschen bedeutet, den Inhalt zweier Objekte, Felder oder Variablen auszutauschen. Vertauschen mittels einer arithmetischen Operation bedeutet, den Tausch mithilfe einer mathematischen Gleichung durchzuführen, z. B. Addition und Subtraktion.traction.

Wenn uns zwei Zahlen gegeben werden und wir aufgefordert werden, sie ohne Verwendung einer temporären Variablen zu vertauschen, dann können wir die Zahlen mithilfe von drei arithmetischen Gleichungen vertauschen.

Pseudocode für Tauschping Zahlen unter Verwendung einer arithmetischen Operation:

A = A + B
B = A - B
A = A - B

Nehmen wir an, wir haben zwei Zahlen, A = 20 und B = 30.

Bedingung 1: A = A+B

Der aktuelle Wert von A beträgt also 20 + 30 = 50.

Bedingung 2: B = AB

Nun ist B = 50-30 = 20
Wir können sehen, dass wir den Wert von A in B erhalten haben.

Bedingung 3: A = AB

Schließlich ist A = 50-20 = 30
A hat den Anfangswert von B.

Also haben wir einfach die Nummern vertauscht.

Hier ist das Programm zum Vertauschen zweier Zahlen in C/C++:

#include<stdio.h>
int main()
{
	int a, b;
	printf("Enter value of A: ");
	scanf("%d", & a);
	printf("Enter value of B: ");
	scanf("%d", & b);
	printf("A = %d, B = %d", a, b);
	a = a + b;
	b = a - b;
	a = a - b;
	printf("\nNow, A = %d, B = %d", a, b);
}

Ausgang:

Enter value of A: 20
Enter value of B: 30
A = 20 , B = 30
Now, A = 30 , B = 20

Programm in Python:

a = int(input("Enter value of A: "))
b = int(input("Enter value of B: "))
print("A = {} and B = {}".format(a, b))
a = a + b
b = a - b
a = a - b
print("Now, A = {} and B = {}".format(a, b))

Ausgang:

Enter value of A: 20
Enter value of B: 30
A = 20 , B = 30
Now, A = 30 , B = 20

Jetzt in PythonWir müssen nicht einmal arithmetische Operationen durchführen. Wir können Folgendes verwenden:

a,b = b,a

Hier ist ein Beispiel, bei dem a=20 und b=30 gilt;

Tauschen Sie mithilfe der arithmetischen Gleichung

Tauschen mit Bitwise XOR OperaDo.

Diese Methode ist auch als XOR-Verknüpfung bekannt. XOR bedeutet exklusives Oder. Bei dieser bitweisen Operation werden zwei Bits als Eingaben für die XOR-Verknüpfung verwendet. Damit die XOR-Verknüpfung einen Ausgabewert liefert, muss genau eine der Eingaben 1 sein. Andernfalls ist die Ausgabe 0. Die folgende Tabelle zeigt die Ausgabewerte für alle Kombinationen der Eingaben A und B.

Wir müssen verstehen, wie die XOR-Operation funktioniert, um zwei Zahlen bitweise zu vertauschen. Hier ist eine Tabelle für XOR, wobei A und B die Eingabewerte sind.

A B Ein XOR-B
0 0 0
0 1 1
1 0 1
1 1 0

Haben zwei Eingaben denselben Wert, ergibt die XOR-Operation 0, andernfalls 1. In diesem Beispiel verwenden wir eine 3-fache XOR-Operation. In den meisten Programmiersprachen wird XOR mit „^“ dargestellt.

Nehmen wir an, A=4 (binär = 0100) und B=7 (binär = 0111).

Bedingung 1: A = A ^ B

A 0 1 0 0
B 0 1 1 1
A ^ B 0 0 1 1

Nun ist A = 0011 (in Binärform).

Bedingung 2: B = A^B

A 0 0 1 1
B 0 1 1 1
A ^ B 0 1 0 0

Also B = 0100, was der anfängliche Binärwert von A war.

Bedingung 3: A = A^B

A 0 0 1 1
B 0 1 0 0
A ^ B 0 1 1 1

Schließlich ist A = 0111, was der äquivalente Binärwert von B war.

Programmieren in C/C++:

#include<stdio.h>
int main()
{
	int a, b;
	printf("Enter value of A: ");
	scanf("%d", & a);
	printf("Enter value of B: ");
	scanf("%d", & b);
	printf("A = %d, B = %d", a, b);
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	printf("\nNow, A = %d, B = %d", a, b);
}

Ausgang:

Enter value of A:4
Enter value of B:7
A=4, B=7
Now, A=7, B=4.

Programm in Python:

a = int(input("Enter value of A: "))
b = int(input("Enter value of B: "))
print("A = {} and B = {}".format(a, b))
a = a ^ b
b = a ^ b
a = a ^ b
print("Now, A = {} and B = {}".format(a, b))

Ausgang:

Enter the value of A:10
Enter the value of B:15
A=10 and B=15
Now, A=15,B=10.

Tausch Numbers mit Bitweiser Arithmetik

Diese Methode entspricht der arithmetischen Methode, jedoch verwenden wir bitweise Operationen wie UND, ODER und Komplementierung für Addition und Subtraktion.traction. Bevor wir zu den einzelnen Schritten kommen, wollen wir kurz den Begriff „Komplement“ betrachten.

Das Einerkomplement bedeutet, alle 0 in 1 und alle 1 in 0 zu ändern. Nehmen wir ein Beispiel.

  • Nehmen wir an, es handelt sich um die Zahl 23, eine Dezimalzahl.
  • Die Umwandlung in Binärdarstellung ergibt 10111. Es sind nur 5 Bits, aber der Computer speichert Zahlen in 8, 16, 32, 64 usw. Bits. Fügen wir also eine Null vor der Binärzahl hinzu. Das ändert den ursprünglichen Wert der Zahl nicht. Sie wird also zu 10111. 00010111.
  • Wie wir wissen, bedeutet das Einerkomplement, alle 0 in 1 und alle 1 in 0 zu ändern, also das Einerkomplement über 00010111 gibt 11101000.

Das Einerkomplement wird in den meisten Programmiersprachen mit dem Symbol „~“ dargestellt. Setzt man dieses Symbol vor einen beliebigen ganzzahligen oder Gleitkommawert, erhält man das Einerkomplement.

Und 2er-Komplement bedeutet das Hinzufügen der binären „1“ zum 1er-Komplement. Wenn wir das 2er-Komplement zur obigen Zahl machen:

  • Binär = 00010111
  • Einerkomplement = 11101000
  • Einerkomplement:

11101000

+ 1

11101001

Das Zweierkomplement ist also 2. Dies ist die Binärzahl für -11101001.
Zusammenfassend sieht die Ausführung des Zweierkomplements einer Zahl A wie folgt aus:

2er-Komplement von A = (~A) + 1

Nehmen wir nun an, A=8 (binär 00001000), B=10 (00001010)

Bedingung 1: A = (A & B) + (A | B)

Es ist äquivalent zu A = A + B.

A & B = 00001000 & 00001010 = 00001000

A | B = 00001000 | 00001010 = 00001010

Nun, 00001000 + 00001010 = 00010010 (Dezimal 18)

Also, A = 18

Bedingung 2: B = A + (~B) + 1

Es entspricht B = AB

Hier gilt B = A – B

Aus der obigen Diskussion ergibt sich, dass wir, falls wir Unteraufgaben durchführen müssen, …tracBei dieser Kontraktion bilden wir das Zweierkomplement der negativen Zahl und addieren sie dann.

Also -B = ~B + 1

Nun ist B = 00010010 + (11110101) + 1 = 00001000

Der Wert von B entspricht der Dezimalzahl 8, dem Anfangswert.

Bedingung 3: A = A + (~B) + 1

Es entspricht A = AB

Nun ist A = 00010010 + 11110111 + 1

A = 00001010 (entspricht Dezimalzahl 10)

Schließlich erhielt A den Wert von B. Somit ergab sich der Tausch.ping wurde abgeschlossen.

Programmieren in C/C++:

#include<stdio.h>
int main()
{
	int a, b;
	printf("Enter value of A: ");
	scanf("%d", & a);
	printf("Enter value of B: ");
	scanf("%d", & b);
	printf("A = %d, B = %d", a, b);
	a = (a & b) + (a | b);
	b = a + ~b + 1;
	a = a + ~b + 1;
	printf("\nNow, A = %d, B = %d", a, b);
}

Ausgang:

Enter the value of A: 8
Enter the value of B:10
A=8, B=10
Now, A=10, B=8

Programm in Python:

a = int(input("Enter value of A: "))
b = int(input("Enter value of B: "))
print("A = {} and B = {}".format(a, b))
a = (a & b) + (a | b)
b = a + ~b + 1
a = a + ~b + 1
print("Now, A = {} and B = {}".format(a, b))

Ausgang:

Enter the value of A: 25
Enter the value of B: 25
A = 25 and B = 25
Now, A = 25 and B = 25

Was ist ein arithmetischer Überlauf?

Der Begriff Überlauf bedeutet, dass eine Grenze überschritten wird. Arithmetischer Überlauf bedeutet, dass das Ergebnis einer arithmetischen Operation den Bereich oder die Grenze der Zahlendarstellung der Computerarchitektur überschreitet. Wird beispielsweise eine Zahl durch Null geteilt, wird sie unendlich groß, und das Zahlensystem des Computers kann sie nicht mit 32 oder 64 Bit darstellen.

Darstellung ganzzahliger Zahlen

Ganzzahldarstellung in einem 32-Bit-System

Die Folge des arithmetischen Überlaufs kann sein:

  • Die Addition zweier positiver Zahlen ergibt ein negatives Ergebnis, da das Vorzeichenbit 1 werden könnte, was eine negative Zahl bedeuten würde.
  • Die Addition zweier negativer Zahlen ergibt eine positive Zahl, weil das Vorzeichenbit 0 werden kann, was eine positive Zahl bedeutet.

Häufig gestellte Fragen

XOR-Tauschping ist der Favorit im Interview: kein zusätzlicher Speicher, kein Überlauf. Arithmetik ist eine gute Backup-Lösung, und Python Entwickler schreiben üblicherweise einfach a, b = b, a.

Nein. Bitweises XOR funktioniert nur mit ganzzahligen Bitmustern, nicht mit Gleitkommazahlen, Doubles oder Zeigern. Verwenden Sie für Gleitkommazahlen stattdessen das Entpacken von Tupeln oder den arithmetischen Tausch.

Wenn sich beide Variablen einen Speicherplatz teilen, XOR-Tauschping Setzt den Wert auf 0. Füge eine if-Abfrage hinzu, wenn Aliasing möglich ist.

Ja: a = a * b, b = a / b, a = a / b. Aber es schlägt fehl, wenn einer der Werte 0 ist, und die Gleitkommagenauigkeit geht verloren.

Nur das Entpacken von Tupeln ist möglich. Mit `a, b = b, a` werden Zeichenketten, Listen oder Objekte vertauscht. Arithmetische Operationen und XOR-Verknüpfungen funktionieren nur mit ganzen Zahlen.

Kaum. Moderne Compiler optimieren bereits den Tausch von temporären Variablen, daher verbessert dieser Trick die Geschwindigkeit nur selten. Readable Code ist wichtiger als das Speichern einer einzelnen Variable.

Ja. Der Code für maschinelles Lernen vertauscht Werte mit Python Tupel-Entpackung und NumPy Die Indizierung wie arr[[i, j]] = arr[[j, i]] vertauscht die Zeilen des Arrays direkt.

Ja. GitHub Copilot und ähnliche KI-Assistenten erzeugen XOR-, arithmetische und Tupel-Entpackungs-Swaps anhand einer Eingabeaufforderung. RevÜberprüfen Sie jedes Exemplar auf Überlauf- und Aliasing-Fehler.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: