Python Program til at bytte om på to tal uden at bruge den tredje variabel
⚡ Smart opsummering
Swapping To tal uden en tredje variabel bytter deres værdier ved hjælp af aritmetisk addition og subtraktiontraction, den bitvise XOR-operator eller bitvis-aritmetiske tricks. Python kan også bytte direkte med tuple-udpakning.

Afsnittene nedenfor dækker fire måder at bytte uden en midlertidig variabel, plus aritmetisk overløb.
I programmeringssprog, swapping betyder at udveksle værdierne af to variabler. Variablen kan indeholde et tal, en streng, en liste eller et array, et objekt osv. Den generelle måde at bytte påping er at bruge en midlertidig variabel til at holde værdier. For eksempel,
De generelle trin i bytteprocessenping to tal er:
- Deklarér en midlertidig variabel C
- Tildel værdien af A til C, hvilket betyder C = A. Nu er C = 20
- Tildel værdien af B til A, så A = 30
- Tildel værdien af C til B, så B = 20, da C har værdien 20.
Sådan bytter manping gøres ved hjælp af en midlertidig variabel, og det virker for både heltal og flydende tal.
Byt ved hjælp af aritmetisk ligning
Som vi ved, bytteping betyder at udskifte indholdet af to objekter, felter eller variabler. Byt ved hjælp af en aritmetisk operation betyder at udføre byttet ved hjælp af en matematisk ligning, dvs. addition og subtraktion.traction.
Hvis vi får to tal og bliver bedt om at bytte om uden at bruge en midlertidig variabel, kan vi bytte tallene ved hjælp af tre aritmetiske ligninger.
Pseudokode til swapping tal ved hjælp af en aritmetisk operation:
A = A + B B = A - B A = A - B
Lad os antage, at vi har to tal, A = 20 og B = 30.
Betingelse 1: A = A+B
Så den nuværende værdi af A er 20 + 30 = 50
Betingelse 2: B = AB
Nu er B = 50-30 = 20
Vi kan se, at vi har værdien af A i B.
Betingelse 3: A = AB
Endelig er A = 50-20 = 30
A har startværdien af B.
Så vi har bare byttet tallene.
Her er programmet til at bytte om på to tal i 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); }
Output:
Enter value of A: 20 Enter value of B: 30 A = 20 , B = 30 Now, A = 30 , B = 20
Program i 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))
Output:
Enter value of A: 20 Enter value of B: 30 A = 20 , B = 30 Now, A = 30 , B = 20
Nu i Python, behøver vi ikke engang at udføre aritmetiske operationer. Vi kan bruge:
a,b = b,a
Her er en demonstration hvor a=20, b=30;
Skift med Bitwise XOR OperaTor
Denne metode er også kendt som XOR-swap. XOR betyder eksklusiv ELLER. Vi tager to bits som input til XOR'en i denne bitvise operation. For at få ét output fra XOR skal kun ét input være 1. Ellers vil outputtet være 0. Følgende tabel viser outputtet for alle kombinationer af input A og B.
Vi skal vide, hvordan XOR-operationen fungerer for at bytte om på to tal ved hjælp af den bitvise operation. Her er en tabel for XOR, hvor A og B er inputværdierne.
| A | B | A XOR B |
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Hvis to input har samme værdi, giver XOR-operationen 0; ellers 1. I dette eksempel bruger vi en 3 XOR-operation. I de fleste programmeringssprog betegnes XOR som "^".
Lad os antage A=4 (i binær = 0100) og B=7 (i binær, 0111)
Betingelse 1: A = A ^ B
| A | 0 | 1 | 0 | 0 |
| B | 0 | 1 | 1 | 1 |
| A ^ B | 0 | 0 | 1 | 1 |
Nu er A = 0011 (i binært).
Betingelse 2: B = A^B
| A | 0 | 0 | 1 | 1 |
| B | 0 | 1 | 1 | 1 |
| A ^ B | 0 | 1 | 0 | 0 |
Så B = 0100, som var den indledende binære værdi af A.
Betingelse 3: A = A^B
| A | 0 | 0 | 1 | 1 |
| B | 0 | 1 | 0 | 0 |
| A ^ B | 0 | 1 | 1 | 1 |
Endelig er A = 0111, som var den ækvivalente binære værdi af B.
Program i 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); }
Output:
Enter value of A:4 Enter value of B:7 A=4, B=7 Now, A=7, B=4.
Program i 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))
Output:
Enter the value of A:10
Enter the value of B:15
A=10 and B=15
Now, A=15,B=10.
Swap Numbers ved hjælp af Bitwise-Aritmetic
Denne metode er den samme som den aritmetiske metode, men vi bruger bitvise operationer som AND, OR og komplement til at udføre addition og subtraktiontracLad os se nærmere på ordet "komplement", før vi går videre til trinene.
1'ers komplement betyder at ændre alle 0'ere til 1 og 1 til 0. Lad os tage et eksempel.
- Lad os antage tallet 23, et decimaltal.
- Konvertering til binært tal giver os 10111. Der er kun 5 bit, men computeren gemmer tal i 8, 16, 32, 64 ... bit. Lad os derfor tilføje nul foran det binære tal. Det vil ikke ændre tallets oprindelige værdi. Så det bliver 00010111.
- Som vi ved, betyder 1'ers komplement at ændre alle 0'ere til 1 og 1 til 0, så at udføre 1'ers komplement igen 00010111 giver 11101000.
Dette 1-talskomplement er repræsenteret med symbolet "~" i de fleste programmeringssprog. Hvis dette symbol sættes før heltalsværdier eller flydende kommaværdier, får du 1-talskomplementet.
Og 2's komplement betyder at tilføje binært "1" til 1'erens komplement. Hvis vi gør 2'er komplement til ovenstående tal:
- Binær = 00010111
- 1'ers komplement = 11101000
- 2'er komplement:
11101000
+ 1
11101001
Så 2's komplement er 11101001. Dette er binær for -23.
Sammenfattende, for at udføre 2's komplement af et nummer A, vil det se sådan ud:
2's komplement af A = (~A) + 1
Lad os nu antage A=8 (binær 00001000), B=10 (00001010)
Betingelse 1: A = (A & B) + (A | B)
Det svarer til A = A + B.
A & B = 00001000 & 00001010 = 00001000
A | B = 00001000 | 00001010 = 00001010
Nu, 00001000 + 00001010 = 00010010 (decimal 18)
Så A = 18
Betingelse 2: B = A + (~B) + 1
Det svarer til B = AB
Her er B = A – B
Ud fra ovenstående diskussion, hvis vi har brug for at udføre subtracI denne sætning udfører vi 2'ers komplement til det negative tal og lægger det derefter sammen.
Altså -B = ~B + 1
Nu er B = 00010010 + (11110101) + 1 = 00001000
B's værdi svarer til decimal 8, som var startværdien.
Betingelse 3: A = A + (~B) + 1
Det svarer til A = AB
Nu er A = 00010010 + 11110111 + 1
A = 00001010 (svarende til decimal 10)
Endelig fik A værdien af B. Således byttetping blev afsluttet.
Program i 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); }
Output:
Enter the value of A: 8 Enter the value of B:10 A=8, B=10 Now, A=10, B=8
Program i 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))
Output:
Enter the value of A: 25 Enter the value of B: 25 A = 25 and B = 25 Now, A = 25 and B = 25
Hvad er aritmetisk overløb?
Udtrykket overflow betyder at overskride grænsen. Aritmetisk overflow betyder, at resultatet af enhver aritmetisk operation overstiger området eller grænsen for computerarkitekturens talrepræsentation. For eksempel, hvis et tal divideres med nul, bliver det uendeligt, og computerens talsystem kan ikke holde det i 32 eller 64 bit.
Heltalsrepræsentation i et 32-bit system
Konsekvensen af det aritmetiske overløb kan være:
- Additionen af to positive tal bliver negativ, fordi fortegnsbitten kan blive 1, hvilket betyder et negativt tal.
- Additionen af to negative tal bliver positiv, fordi fortegnsbitten kan blive 0, hvilket betyder et positivt tal.



