Python Programma om twee getallen te verwisselen zonder een derde variabele te gebruiken
โก Slimme samenvatting
Ruilenping Twee getallen zonder een derde variabele wisselen hun waarden ter plekke uit door middel van rekenkundige optelling en aftrekking.tracde bitwise XOR-operator of bitwise-rekenkundige trucs. Python Je kunt ook rechtstreeks wisselen met behulp van tuple-unpacking.

De onderstaande paragrafen behandelen vier manieren om te wisselen zonder een tijdelijke variabele, plus rekenkundige overloop.
In programmeertalen, ruilenping Dit betekent het verwisselen van de waarden van twee variabelen. De variabele kan een getal, tekenreeks, lijst of array, object, enzovoort bevatten. De algemene manier om te verwisselen is door de waarden van twee variabelen te verwisselen.ping Een tijdelijke variabele gebruiken om waarden op te slaan, bijvoorbeeld:
De algemene stappen van een swapping twee getallen zijn:
- Declareer een tijdelijke variabele C
- Wijs de waarde van A toe aan C, wat betekent dat C = A. Nu C = 20
- Ken de waarde van B toe aan A, dus A = 30
- Wijs de waarde van C toe aan B, dus B = 20, aangezien C de waarde 20 heeft.
Zo wissel je van gedachten.ping Dit gebeurt met behulp van een tijdelijke variabele en werkt zowel voor gehele getallen als voor drijvende-kommagetallen.
Wissel met behulp van rekenkundige vergelijkingen
Zoals we weten, ruilenping Dit betekent het verwisselen van de inhoud van twee objecten, velden of variabelen. Verwisselen met behulp van een rekenkundige bewerking betekent de verwisseling uitvoeren met behulp van een wiskundige vergelijking, bijvoorbeeld optellen en aftrekken.tractie.
Als we twee getallen krijgen en gevraagd worden om ze te verwisselen zonder een tijdelijke variabele te gebruiken, dan kunnen we de getallen verwisselen met behulp van drie rekenkundige vergelijkingen.
Pseudocode voor swapping getallen met behulp van een rekenkundige bewerking:
A = A + B B = A - B A = A - B
Laten we aannemen dat we twee getallen hebben, A = 20 en B = 30.
Staat 1: EEN=A+B
De huidige waarde van A is dus 20 + 30 = 50.
Staat 2: B = AB
Nu is B = 50-30 = 20
We kunnen zien dat we de waarde van A in B hebben gekregen.
Staat 3: EEN=AB
Tenslotte A = 50-20 = 30
A heeft de beginwaarde van B.
Dus we hebben de getallen omgedraaid.
Hier is het programma om twee getallen in C te verwisselen.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
Programma 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))
Output:
Enter value of A: 20 Enter value of B: 30 A = 20 , B = 30 Now, A = 30 , B = 20
Nu in PythonWe hoeven zelfs geen rekenkundige bewerkingen uit te voeren. We kunnen gebruikmaken van:
a,b = b,a
Hier volgt een demonstratie waarbij a=20 en b=30;
Ruilen met behulp van Bitwise XOR Operator
Deze methode staat ook bekend als XOR-swap. XOR staat voor Exclusive OR (exclusieve OF). Bij deze bitwise-bewerking gebruiken we twee bits als invoer voor de XOR-bewerking. Om รฉรฉn uitvoer te krijgen van de XOR-bewerking, moet slechts รฉรฉn van de invoerbits 1 zijn. Anders is de uitvoer 0. De volgende tabel toont de uitvoer voor alle combinaties van invoerbits A en B.
We moeten begrijpen hoe de XOR-bewerking werkt om twee getallen te verwisselen met behulp van een bitwise-bewerking. Hier is een tabel voor XOR, waarbij A en B de invoerwaarden zijn.
| A | B | Een XOR B |
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Als twee invoerwaarden gelijk zijn, geeft de XOR-bewerking 0; anders 1. In dit voorbeeld gebruiken we een 3XOR-bewerking. In de meeste programmeertalen wordt XOR aangeduid met "^".
Laten we aannemen dat A=4 (binair = 0100) en B=7 (binair = 0111).
Staat 1: EEN = EEN ^ B
| A | 0 | 1 | 0 | 0 |
| B | 0 | 1 | 1 | 1 |
| EEN ^ B | 0 | 0 | 1 | 1 |
Nu, A = 0011 (in binair getal).
Staat 2: B = A ^ B
| A | 0 | 0 | 1 | 1 |
| B | 0 | 1 | 1 | 1 |
| EEN ^ B | 0 | 1 | 0 | 0 |
Dus B = 0100, wat de initiรซle binaire waarde van A was.
Staat 3: EEN = EEN^B
| A | 0 | 0 | 1 | 1 |
| B | 0 | 1 | 0 | 0 |
| EEN ^ B | 0 | 1 | 1 | 1 |
Tenslotte A = 0111, wat de equivalente binaire waarde van B was.
Programma 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); }
Output:
Enter value of A:4 Enter value of B:7 A=4, B=7 Now, A=7, B=4.
Programma 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))
Output:
Enter the value of A:10
Enter the value of B:15
A=10 and B=15
Now, A=15,B=10.
Ruilen Numbers met behulp van Bitwise-rekenkunde
Deze methode is hetzelfde als de rekenkundige methode, maar we gebruiken bitwise-bewerkingen zoals AND, OR en complement om optellen en aftrekken uit te voeren.tracVoordat we naar de stappen gaan, laten we eerst even kort de betekenis van "complement" bekijken.
Het 1-complement betekent dat alle nullen in enen en alle enen in nullen worden veranderd. Laten we een voorbeeld nemen.
- Laten we aannemen dat 23 een decimaal getal is.
- Omzetten naar binair geeft ons 10111. Er zijn maar 5 bits, maar de computer slaat getallen op in 8, 16, 32, 64 โฆ bits. Laten we daarom een โโnul voor het binaire getal plaatsen. Dit verandert de oorspronkelijke waarde van het getal niet. Het wordt dus 10111. 00010111.
- Zoals we weten, betekent het 1-complement dat alle nullen in enen en alle enen in nullen worden veranderd. Het uitvoeren van het 1-complement over 00010111 geeft 11101000.
Het 1-complement wordt in de meeste programmeertalen weergegeven met het symbool "~". Door dit symbool voor een geheel getal of een drijvende-kommawaarde te plaatsen, krijg je het 1-complement.
En het 2-complement betekent het toevoegen van binaire โ1โ aan het 1-complement. Als we 2's complementeren met het bovenstaande getal:
- Binair = 00010111
- 1's complement = 11101000
- 2's complement:
11101000
+ 1
11101001
Het complement van 2 is dus 11101001. Dit is het binaire getal voor -23.
Samenvattend, voor het uitvoeren van het 2-complement van een getal A, zal het er als volgt uitzien:
2's complement van A = (~A) + 1
Laten we nu aannemen dat A=8 (binair 00001000) en B=10 (00001010).
Staat 1: EEN = (A & B) + (A | B)
Dit is gelijk aan A = A + B.
A & B = 00001000 & 00001010 = 00001000
Een | B = 00001000 | 00001010 = 00001010
Nu, 00001000 + 00001010 = 00010010 (decimaal 18)
Dus A = 18
Staat 2: B = EEN + (~B) + 1
Dit is gelijk aan B = AB
Hier geldt B = A โ B
Uit de bovenstaande discussie blijkt dat als we een subprocedure moeten uitvoeren...tracVervolgens passen we het 2-complement toe op het negatieve getal en tellen we het resultaat erbij op.
Dus -B = ~B + 1
Nu is B = 00010010 + (11110101) + 1 = 00001000
De waarde van B is gelijk aan decimaal 8, wat de beginwaarde was.
Staat 3: EEN = EEN + (~B) + 1
Dit is gelijk aan A = AB
Nu is A = 00010010 + 11110111 + 1
A = 00001010 (equivalent aan decimaal 10)
Uiteindelijk kreeg A de waarde van B. Zo vond de ruil plaats.ping was voltooid.
Programma 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); }
Output:
Enter the value of A: 8 Enter the value of B:10 A=8, B=10 Now, A=10, B=8
Programma 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))
Output:
Enter the value of A: 25 Enter the value of B: 25 A = 25 and B = 25 Now, A = 25 and B = 25
Wat is rekenkundige overloop?
De term 'overloop' betekent het overschrijden van de limiet. Rekenkundige overloop betekent dat het resultaat van een rekenkundige bewerking het bereik of de limiet van de getalrepresentatie van de computerarchitectuur overschrijdt. Als een getal bijvoorbeeld door nul wordt gedeeld, wordt het oneindig en kan het getalsysteem van de computer dit niet in 32 of 64 bits opslaan.
Representatie van gehele getallen in een 32-bits systeem
Het gevolg van de rekenkundige overloop kan zijn:
- De optelling van twee positieve getallen wordt negatief, omdat het tekenbit 1 kan worden, wat een negatief getal betekent.
- De optelling van twee negatieve getallen wordt positief, omdat het tekenbit 0 kan worden, wat een positief getal betekent.



