Python Ohjelma kahden luvun vaihtamiseksi käyttämättä kolmatta muuttujaa
⚡ Älykäs yhteenveto
Vaihtaaping kaksi lukua ilman kolmatta muuttujaa vaihtavat arvonsa paikoilleen käyttämällä aritmeettista yhteenlaskua ja osalaskuatractiota, bittikohtaista XOR-operaattoria tai bittikohtaisia aritmeettisia temppuja. Python voi myös vaihtaa suoraan tuplen purkamisen yhteydessä.
Alla olevat osiot käsittelevät neljää tapaa vaihtaa ilman väliaikaista muuttujaa sekä aritmeettista ylivuotoa.
Ohjelmointikielissä swapping tarkoittaa kahden muuttujan arvojen vaihtamista. Muuttuja voi sisältää numeron, merkkijonon, listan tai taulukon, objektin jne. Yleinen vaihtotapaping on käyttää väliaikaista muuttujaa arvojen säilyttämiseen. Esimerkiksi
Vaihdon yleiset vaiheetping kaksi numeroa ovat:
- Ilmoita väliaikainen muuttuja C
- Määritä A:n arvoksi C, mikä tarkoittaa, että C = A. Nyt C = 20
- Anna B:n arvo A:lle, joten A = 30
- Anna C:n arvo B:lle, joten B = 20, koska C:n arvo on 20.
Näin vaihto tapahtuuping tehdään väliaikaisen muuttujan avulla, ja se toimii sekä kokonaisluku- että liukulukujen kanssa.
Vaihda käyttämällä aritmeettista yhtälöä
Kuten tiedämme, vaihtoping tarkoittaa kahden objektin, kentän tai muuttujan sisällön vaihtamista. Vaihto aritmeettisella operaatiolla tarkoittaa vaihdon suorittamista matemaattisen yhtälön avulla, eli yhteenlaskulla ja osalaskulla.tracseen.
Jos meille annetaan kaksi lukua ja pyydetään vaihtamaan ne keskenään käyttämättä väliaikaista muuttujaa, niin voimme vaihtaa luvut keskenään käyttämällä kolmea aritmeettista yhtälöä.
Pseudokoodi swapilleping numerot aritmeettisen operaation avulla:
A = A + B B = A - B A = A - B
Oletetaan, että meillä on kaksi lukua, A = 20 ja B = 30.
Ehto 1: A = A+B
Joten A:n nykyinen arvo on 20 + 30 = 50
Ehto 2: B = AB
Nyt B = 50-30 = 20
Voimme nähdä, että saimme A:n arvon B:ssä.
Ehto 3: A = AB
Lopuksi A = 50-20 = 30
A:n alkuarvo on B.
Vaihdoimme siis vain numeroita.
Tässä on ohjelma kahden C-kielisen luvun vaihtamiseksi.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); }
lähtö:
Enter value of A: 20 Enter value of B: 30 A = 20 , B = 30 Now, A = 30 , B = 20
Ohjelma sisään 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))
lähtö:
Enter value of A: 20 Enter value of B: 30 A = 20 , B = 30 Now, A = 30 , B = 20
Nyt sisällä Python, meidän ei tarvitse edes suorittaa aritmeettisia laskutoimituksia. Voimme käyttää:
a,b = b,a
Tässä on demonstraatio, jossa a=20, b=30;
Vaihda Bitwise XOR:lla OperaTor
Tätä menetelmää kutsutaan myös XOR-vaihdoksi. XOR tarkoittaa eksklusiivista TAI-operaatiota. Tässä bittikohtaisessa operaatiossa XOR-operaation syötteinä käytetään kaksi bittiä. Jotta XOR-operaatiosta saataisiin yksi lähtö, vain toisen tulon on oltava 1. Muuten lähtö on 0. Seuraava taulukko näyttää kaikkien tulojen A ja B yhdistelmien lähdön.
Meidän on tiedettävä, miten XOR-operaatio toimii kahden luvun vaihtamiseksi bittikohtaisesti. Tässä on taulukko XOR-operaatiolle, jossa A ja B ovat syöttöarvot.
| A | B | A XOR B |
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Jos kahdella syötteellä on sama arvo, XOR-operaatio antaa arvon 0; muuten arvon 1. Tässä esimerkissä käytämme 3 XOR-operaatiota. Useimmissa ohjelmointikielissä XOR merkitään merkeillä "^".
Oletetaan, että A=4 (binäärimuodossa = 0100) ja B=7 (binäärimuodossa 0111)
Ehto 1: A = A ^ B
| A | 0 | 1 | 0 | 0 |
| B | 0 | 1 | 1 | 1 |
| A^B | 0 | 0 | 1 | 1 |
Nyt A = 0011 (binäärimuodossa).
Ehto 2: B = A^B
| A | 0 | 0 | 1 | 1 |
| B | 0 | 1 | 1 | 1 |
| A^B | 0 | 1 | 0 | 0 |
Joten B = 0100, joka oli A:n alkuperäinen binääriarvo.
Ehto 3: A = A^B
| A | 0 | 0 | 1 | 1 |
| B | 0 | 1 | 0 | 0 |
| A^B | 0 | 1 | 1 | 1 |
Lopuksi A = 0111, joka oli B:n ekvivalentti binääriarvo.
Ohjelma 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); }
lähtö:
Enter value of A:4 Enter value of B:7 A=4, B=7 Now, A=7, B=4.
Ohjelma sisään 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))
lähtö:
Enter the value of A:10
Enter the value of B:15
A=10 and B=15
Now, A=15,B=10.
Vaihtaa Numbers käyttämällä bittiaritmetiikkaa
Tämä menetelmä on sama kuin aritmeettinen menetelmä, mutta käytämme bittikohtaisia operaatioita, kuten JA, TAI ja komplementti, yhteen- ja osalaskujen suorittamiseen.tracEnnen kuin siirrymme vaiheisiin, tarkastellaanpa nopeasti sanaa ”täydennys”.
Ykkösen komplementti tarkoittaa kaikkien nollien muuttamista ykkösiksi ja ykkösten muuttamista nollaksi. Otetaan esimerkki.
- Oletetaan, että luku 23 on desimaaliluku.
- Binääriluvuksi muuntaminen antaa meille luvun 10111. Bittejä on vain 5, mutta tietokone tallentaa numerot 8, 16, 32, 64 … bittiin. Lisätään siis nolla binääriluvun eteen. Se ei muuta luvun alkuperäistä arvoa. Joten siitä tulee 00010111.
- Kuten tiedämme, ykkösen komplementti tarkoittaa kaikkien nollien muuttamista ykkösiksi ja ykkösten muuttamista nollaksi, joten ykkösen komplementin suorittaminen yli 00010111 antaa 11101000.
Tämä ykkösten komplementti esitetään useimmissa ohjelmointikielissä symbolilla "~". Tämän symbolin sijoittaminen kokonaislukuarvojen tai liukulukuarvojen eteen antaa ykkösten komplementin.
Ja 2:n komplementti tarkoittaa binaarisen "1" lisäämistä 1:n komplementtiin. Jos teemme 2:n täydennyksen yllä olevaan numeroon:
- Binääri = 00010111
- Ykkösen komplementti = 11101000
- 2:n komplementti:
11101000
+ 1
11101001
Joten 2:n komplementti on 11101001. Tämä on -23:n binaari.
Yhteenvetona voidaan todeta, että luvun A komplementin suorittaminen 2:lla näyttää tältä:
2:n komplementti A = (~A) + 1
Oletetaan nyt, että A=8 (binääri 00001000), B=10 (00001010)
Ehto 1: A = (A & B) + (A | B)
Se on yhtä kuin A = A + B.
A & B = 00001000 & 00001010 = 00001000
A | B = 00001000 | 00001010 = 00001010
Nyt, 00001000 + 00001010 = 00010010 (desimaali 18)
Eli A = 18
Ehto 2: B = A + (~B) + 1
Se on yhtä kuin B = AB
Tässä B = A - B
Yllä olevan keskustelun perusteella, jos meidän on suoritettava osatractilanteessa suoritamme negatiiviselle luvulle 2:n komplementin ja sitten lisäämme sen.
Joten -B = ~B + 1
Nyt B = 00010010 + (11110101) + 1 = 00001000
B:n arvo vastaa desimaalilukua 8, joka oli alkuarvo.
Ehto 3: A = A + (~B) + 1
Se on yhtä kuin A = AB
Nyt A = 00010010 + 11110111 + 1
A = 00001010 (vastaa desimaalilukua 10)
Lopulta A sai B:n arvon. Näin ollen vaihtoping oli suoritettu.
Ohjelma 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); }
lähtö:
Enter the value of A: 8 Enter the value of B:10 A=8, B=10 Now, A=10, B=8
Ohjelma sisään 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))
lähtö:
Enter the value of A: 25 Enter the value of B: 25 A = 25 and B = 25 Now, A = 25 and B = 25
Mikä on aritmeettinen ylivuoto?
Ylivuoto-termi tarkoittaa rajan ylittämistä. Aritmeettinen ylivuoto tarkoittaa, että minkä tahansa aritmeettisen operaation tulos ylittää tietokoneen arkkitehtuurin numeroesityksen alueen tai rajan. Esimerkiksi jos luku jaetaan nollalla, siitä tulee ääretön, eikä tietokoneen lukujärjestelmä pysty säilyttämään sitä 32 tai 64 bittiin.
Kokonaislukuesitys 32-bittisessä järjestelmässä
Aritmeettisen ylivuodon seuraus voi olla:
- Kahden positiivisen luvun yhteenlasku muuttuu negatiiviseksi, koska etumerkkibitistä voi tulla 1, mikä tarkoittaa negatiivista lukua.
- Kahden negatiivisen luvun yhteenlasku muuttuu positiiviseksi, koska etumerkki voi muuttua nollaksi, mikä tarkoittaa positiivista lukua.




