Python Programm kahe arvu vahetamiseks ilma kolmandat muutujat kasutamata
⚡ Nutikas kokkuvõte
Vahetamaping Kaks arvu ilma kolmanda muutujata vahetavad oma väärtused aritmeetilise liitmise ja alalõike abil.tractsioon, bitipõhine XOR-operaator või bitipõhised aritmeetilised nipid. Python saab ka otse tuple lahtipakkimisega vahetada.
Allolevad jaotised käsitlevad nelja viisi ajutise muutujata vahetamiseks ja aritmeetilist ületäitumist.
Programmeerimiskeeltes vahetatakseping tähendab kahe muutuja väärtuste vahetamist. Muutuja võib sisaldada arvu, stringi, loendit või massiivi, objekti jne. Üldine vahetamise viisping on kasutada ajutist muutujat väärtuste hoidmiseks. Näiteks
Vahetuse üldised sammudping kaks numbrit on:
- Deklareeri ajutine muutuja C
- Määrake A väärtus C-le, mis tähendab, et C = A. Nüüd C = 20
- Määrake B väärtus A-le, nii et A = 30
- Määrake C väärtus B-le, nii et B = 20, kuna C väärtus on 20.
Nii vahetatakseping tehakse ajutise muutuja abil ja see töötab nii täis- kui ka ujukomaarvude puhul.
Vahetage aritmeetilise võrrandi abil
Nagu me teame, vahetameping tähendab kahe objekti, välja või muutuja sisu vahetamist. Vahetamine aritmeetilise tehte abil tähendab vahetuse sooritamist matemaatilise võrrandi, st liitmise ja asendamise abil.tracmise kohta.
Kui meile antakse kaks arvu ja palutakse need vahetada ilma ajutist muutujat kasutamata, siis saame kolme aritmeetilise võrrandi abil arvud vahetada.
Pseudokood vahetuse jaoksping numbrid aritmeetilise tehte abil:
A = A + B B = A - B A = A - B
Oletame, et meil on kaks arvu, A = 20 ja B = 30.
Tingimus 1: A = A+B
Seega on A praegune väärtus 20 + 30 = 50
Tingimus 2: B = AB
Nüüd B = 50-30 = 20
Näeme, et saime A väärtuse B-st.
Tingimus 3: A = AB
Lõpuks A = 50-20 = 30
A algväärtus on B.
Niisiis, me lihtsalt vahetasime numbreid.
Siin on programm kahe numbri vahetamiseks C-keeles.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); }
Väljund:
Enter value of A: 20 Enter value of B: 30 A = 20 , B = 30 Now, A = 30 , B = 20
Programm sisse 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))
Väljund:
Enter value of A: 20 Enter value of B: 30 A = 20 , B = 30 Now, A = 30 , B = 20
Nüüd sisse Python, ei pea me isegi aritmeetilisi tehteid tegema. Me saame kasutada:
a,b = b,a
Siin on näide, kus a=20, b=30;
Vahetage Bitwise XOR-iga Operator
Seda meetodit tuntakse ka kui XOR-vahetust. XOR tähendab eksklusiivset VÕI. Selles bitipõhises operatsioonis võtame XOR-i sisenditeks kaks bitti. XOR-ist ühe väljundi saamiseks peab ainult üks sisend olema 1. Vastasel juhul on väljund 0. Järgmises tabelis on näidatud väljund kõigi sisendite A ja B kombinatsioonide korral.
Peame teadma, kuidas XOR-operatsioon töötab, et vahetada kahte arvu bitipõhiselt. Siin on XOR-operatsiooni tabel, kus A ja B on sisendväärtused.
| A | B | A XOR B |
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Kui kahel sisendil on sama väärtus, annab XOR-operatsioon tulemuseks 0; vastasel juhul 1. Selles näites kasutame XOR-operatsiooni 3. Enamikus programmeerimiskeeltes tähistatakse XOR-i kui „^“.
Oletame, et A=4 (binaarselt = 0100) ja B=7 (binaarselt 0111).
Tingimus 1: A = A ^ B
| A | 0 | 1 | 0 | 0 |
| B | 0 | 1 | 1 | 1 |
| A^B | 0 | 0 | 1 | 1 |
Nüüd A = 0011 (binaarses vormis).
Tingimus 2: B = A^B
| A | 0 | 0 | 1 | 1 |
| B | 0 | 1 | 1 | 1 |
| A^B | 0 | 1 | 0 | 0 |
Seega B = 0100, mis oli A esialgne kahendväärtus.
Tingimus 3: A = A^B
| A | 0 | 0 | 1 | 1 |
| B | 0 | 1 | 0 | 0 |
| A^B | 0 | 1 | 1 | 1 |
Lõpuks A = 0111, mis oli B samaväärne kahendväärtus.
Programm 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); }
Väljund:
Enter value of A:4 Enter value of B:7 A=4, B=7 Now, A=7, B=4.
Programm sisse 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))
Väljund:
Enter the value of A:10
Enter the value of B:15
A=10 and B=15
Now, A=15,B=10.
Vahetama Numbers kasutades bitiviisilist aritmeetikat
See meetod on sama mis aritmeetiline meetod, kuid liitmise ja osamaksete tegemiseks kasutame bitipõhiseid operatsioone, näiteks JA, VÕI ja täiendust.tracEnne sammude juurde asumist vaatame lühidalt üle mõiste „täiendus“.
1 täiend tähendab kõigi 0-de muutmist 1-ks ja 1-de muutmist 0-ks. Võtame näite.
- Oletame arvu 23, mis on kümnendsüsteem.
- Binaararvuks teisendamine annab tulemuseks 10111. Bite on ainult 5, aga arvuti salvestab numbreid 8, 16, 32, 64 … bitis. Seega lisame binaararvu ette nulli. See ei muuda arvu algset väärtust. Seega saab sellest 00010111.
- Nagu me teame, tähendab 1 täiend kõigi 0-de muutmist 1-ks ja 1-de muutmist 0-ks, seega 1 täiendi sooritamine üle 00010111 annab 11101000.
Seda ühe täiendit esindab enamik programmeerimiskeeli sümbol „~”. Selle sümboli asetamine mis tahes täisarvu või ujukomaarvu ette annab ühe täiendi.
Ja 2 komplement tähendab binaarse “1” lisamist 1 täiendusele. Kui teeme ülaltoodud arvule 2 täienduse:
- Binaarne = 00010111
- 1 täiend = 11101000
- 2-de täiend:
11101000
+ 1
11101001
Seega on 2 täiend 11101001. See on -23 binaar.
Kokkuvõttes näeb see arvu A täienduse esitamiseks välja järgmine:
2 täiendus A = (~A) + 1
Oletame nüüd, et A=8 (binaarne 00001000), B=10 (00001010)
Tingimus 1: A = (A ja B) + (A | B)
See on samaväärne A = A + B-ga.
A ja B = 00001000 ja 00001010 = 00001000
A | B = 00001000 | 00001010 = 00001010
Nüüd, 00001000 + 00001010 = 00010010 (18 koma)
Niisiis, A = 18
Tingimus 2: B = A + (~B) + 1
See on samaväärne B = AB-ga
Siin B = A – B
Eelnevast arutelust lähtuvalt, kui meil on vaja alamülesandeid täitatracSelleks teostame negatiivsele arvule kahega täiendi ja seejärel liidame selle.
Niisiis, -B = ~B + 1
Nüüd, B = 00010010 + (11110101) + 1 = 00001000
B väärtus on samaväärne kümnendkohaga 8, mis oli algväärtus.
Tingimus 3: A = A + (~B) + 1
See on samaväärne A = AB-ga
Nüüd A = 00010010 + 11110111 + 1
A = 00001010 (võrdne kümnendkohaga 10)
Lõpuks sai A B väärtuse. Seega vahetustehingping valmis.
Programm 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); }
Väljund:
Enter the value of A: 8 Enter the value of B:10 A=8, B=10 Now, A=10, B=8
Programm sisse 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))
Väljund:
Enter the value of A: 25 Enter the value of B: 25 A = 25 and B = 25 Now, A = 25 and B = 25
Mis on aritmeetiline ületäitumine?
Mõiste "ületäitumine" tähendab piiri ületamist. Aritmeetiline ületäitumine tähendab, et mis tahes aritmeetilise tehte tulemus ületab arvuti arhitektuuri arvuesituse vahemikku või piiri. Näiteks kui arv jagatakse nulliga, muutub see lõpmatuks ja arvuti arvusüsteem ei saa seda 32- ega 64-bitises loendis hoida.
Täisarvude esitus 32-bitises süsteemis
Aritmeetilise ülevoolu tagajärg võib olla:
- Kahe positiivse arvu liitmine muutub negatiivseks, sest märgibitt võib muutuda väärtuseks 1, mis tähendab negatiivset arvu.
- Kahe negatiivse arvu liitmine muutub positiivseks, sest märgibitt võib muutuda nulliks, mis tähendab positiivset arvu.




