Twee getallen omwisselen zonder een derde variabele te gebruiken: C, Python Programma
Bij programmeren betekent taalwissel het verwisselen van de waarde van twee variabelen. De variabele kan een getal, tekenreeks, lijst of array, object, enz. bevatten. De algemene manier van omwisselen is het gebruik van een tijdelijke variabele om waarden vast te houden. Bijvoorbeeld,
De algemene stappen voor het omwisselen van twee getallen zijn:
- Een tijdelijke variabele C gedeclareerd
- 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.
Het is hoe swapping wordt gedaan met behulp van een tijdelijke variabele. Deze methode werkt zowel voor gehele getallen als voor float-getallen.
Wissel met behulp van rekenkundige vergelijkingen
Zoals we weten, betekent swappen het verwisselen van de inhoud van twee objecten of velden of variabelen. Swap met behulp van een rekenkundige bewerking betekent het uitvoeren van de swap-bewerking met behulp van de wiskundige vergelijking, d.w.z. optellen en aftrekken.
Als we twee getallen krijgen en deze moeten omwisselen zonder een tijdelijke variabele te gebruiken, dan kunnen we met behulp van drie rekenkundige vergelijkingen de getallen omwisselen.
Pseudocode voor het verwisselen van getallen met behulp van een rekenkundige bewerking:
A = A + B B = A - B A = A - B
Stel 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 om te wisselen/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 Python, hoeven we niet eens rekenkundige bewerkingen uit te voeren. We kunnen gebruiken:
a,b = b,a
Hier is een demonstratie waarbij a=20, b=30;
Ruilen met behulp van Bitwise XOR Operator
Deze methode staat ook bekend als XOR swap. XOR betekent exclusieve OR. We nemen twee bits als invoer voor de XOR in deze bitgewijze bewerking. Om één uitvoer van XOR te krijgen, mag slechts één invoer 1 zijn. Anders is de uitvoer 0. De volgende tabel toont de uitvoer voor alle combinaties van invoer A B.
We moeten weten hoe de XOR-bewerking werkt om twee getallen te verwisselen met behulp van de bitwise-bewerking. Hier is een tabel voor XOR waarbij A en B invoerwaarden zijn.
A | B | Een XOR B |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Als twee invoer dezelfde waarde heeft, geeft de XOR-bewerking 0; anders 1. Voor dit voorbeeld gebruiken we een 3 XOR-bewerking. In de meeste programmeertalen wordt XOR aangeduid als “^”.
Laten we aannemen dat A=4 (in binair = 0100) en B=7 (in 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 Compliment om optellen en aftrekken uit te voeren. Voordat we naar de stappen gaan, kijken we even snel naar “Compliment”.
Het complement van 1 betekent dat je alle 0 in 1 en 1 in 0 verandert. Laten we een voorbeeld geven.
- Laten we uitgaan van een getal 23, een decimaal getal.
- Omzetten naar binair geeft gebruik 10111. Er zijn slechts 5 bits, maar de computer slaat het getal op in 8,16,32,64 .. bits. Laten we dus nul toevoegen vóór het binaire getal. Het verandert de oorspronkelijke waarde van het getal niet. Dat zal het dus worden 00010111.
- Zoals we weten betekent het compliment van 1 het veranderen van alle 0 in 1 en 1 in 0, dus het uitvoeren van het complement van 1 over 00010111 geeft 11101000
Het complement van deze 1 wordt in de meeste programmeertalen weergegeven met “~” dit symbool. Als u dit symbool vóór gehele waarden of waarden met drijvende komma plaatst, krijgt u 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 compliment = 11101000
- 2's compliment:
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), B=10(00001010)
Staat 1: EEN = (A & B) + (A | B)
Het 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
Het komt overeen met B = AB
Hier geldt B = A – B
Als we uit de bovenstaande discussie moeten aftrekken, voeren we het 2-complement uit op het negatieve getal en tellen we dit vervolgens op.
Dus -B = ~B + 1
Nu, B = 00010010 + (11110101) + 1 = 00001000
De waarde van B is gelijk aan decimaal 8, wat de beginwaarde was.
Staat 3: EEN = EEN + (~B) + 1
Het komt overeen met A = AB
Nu is A = 00010010 + 11110111 + 1
A = 00001010 (equivalent aan decimaal 10)
Uiteindelijk kreeg A de waarde van B. Daarmee was de ruil 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 overflow betekent het overschrijden van de limiet. Rekenkundige overflow betekent dat het resultaat van een rekenkundige bewerking het bereik of de limiet van de getalsrepresentatie van de computerarchitectuur overschrijdt. Als een getal bijvoorbeeld door nul wordt gedeeld, wordt het oneindig en kan het computergetallensysteem het niet in 32 of 64 bits bevatten.
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.