Vaihda kaksi numeroa ilman kolmatta muuttujaa: C, Python Ohjelma

Ohjelmoinnissa kielen vaihto tarkoittaa kahden muuttujan arvon vaihtamista. Muuttuja voi sisältää luvun, merkkijonon, luettelon tai taulukon, objektin jne. Yleinen tapa vaihtaa on käyttää väliaikaista muuttujaa arvojen säilyttämiseen. Esimerkiksi,

Vaihda kaksi Numbers

Kahden numeron vaihtamisen yleiset vaiheet ovat:

  • Ilmoitettu väliaikaiseksi muuttujaksi 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 tapahtuu väliaikaisen muuttujan avulla. Tämä menetelmä toimii sekä kokonaislukujen että liukulukujen kanssa.

Vaihda käyttämällä aritmeettista yhtälöä

Kuten tiedämme, vaihtaminen tarkoittaa kahden objektin tai kentän tai muuttujan sisällön vaihtamista keskenään. Swap aritmeettisella operaatiolla tarkoittaa swap-operaation suorittamista matemaattisen yhtälön avulla eli yhteen- ja vähennyslaskulla.

Jos meille annetaan kaksi numeroa ja niitä pyydetään vaihtamaan ilman väliaikaista muuttujaa, voimme vaihtaa numerot käyttämällä kolmea aritmeettista yhtälöä.

Pseudokoodi numeroiden vaihtamiseen aritmeettisella operaatiolla:

A = A + B
B = A - B
A = A - B

Oletetaan, että meillä on kaksi numeroa, 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
                   Näemme, 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 numeron vaihtamiseksi 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: 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 operaatioita. Voimme käyttää:

a,b = b,a

Tässä on esittely, jossa a=20, b=30;

Vaihda käyttämällä aritmeettista yhtälöä

Vaihda Bitwise XOR:lla OperaTor

Tämä menetelmä tunnetaan myös nimellä XOR-swap. XOR tarkoittaa yksinomaista TAI. Otamme kaksi bittiä XOR:n syötteinä tässä bittikohtaisessa operaatiossa. Saadaksesi yhden lähdön XOR:sta, vain yhden tulon on oltava 1. Muussa tapauksessa lähtö on 0. Seuraavassa taulukossa on esitetty kaikkien tulon A B yhdistelmien lähtö.

Meidän on tiedettävä, kuinka XOR-operaatio toimii vaihtaaksemme kaksi numeroa bittikohtaisella operaatiolla. Tässä on taulukko XOR:lle, jossa A ja B ovat syötearvoja.

A B A XOR B
0 0 0
0 1 1
1 0 1
1 1 0

Jos kahdella tulolla on sama arvo, niin XOR-operaatio antaa 0; muuten 1. Tässä esimerkissä käytämme 3 XOR -operaatiota. Useimmissa ohjelmointikielissä XOR on merkitty "^".

Oletetaan, että A=4 (binäärinä = 0100) ja B=7 (binäärinä 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 AND, OR ja Compliment suorittamaan yhteen- ja vähennyslaskua. Ennen kuin siirryt portaisiin, katsotaanpa nopeasti "Kohde".

1:n komplementti tarkoittaa kaikkien 0:n muuttamista 1:ksi ja 1:stä 0:ksi. Otetaan esimerkki.

  • Oletetaan, että luku on 23, desimaaliluku.
  • Binäärimuotoon muuntaminen antaa käyttöön 10111. Bittejä on vain 5, mutta tietokone tallentaa numerot 8,16,32,64 .. bitteinä. Lisätään siis nolla binaarin eteen. Se ei muuta numeron alkuperäistä arvoa. Joten siitä tulee 00010111.
  • Kuten tiedämme, 1:n kohteliaisuus tarkoittaa kaikkien 0:n muuttamista 1:ksi ja 1:n 0:ksi, joten 1:n komplementin suorittaminen yli 00010111 antaa 11101000

Tämän 1:n täydennyksenä on "~" tämä symboli useimmissa ohjelmointikielissä. Tämän symbolin asettaminen kaikkien kokonaislukuarvojen tai liukulukuarvojen eteen antaa 1:n 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
  • 1:n kohteliaisuus = 11101000
  • 2:n kohteliaisuus:

          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 A=8 (binääriluku 00001000), B=10(00001010)

Ehto 1:    A = (A & B) + (A | B)

                   Se vastaa 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

                   Sen ekvivalentti B = AB

Tässä B = A - B

Yllä olevasta keskustelusta, jos meidän on suoritettava vähennys, suoritamme 2:n komplementin negatiiviselle luvulle ja 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

                   Sen ekvivalentti A = AB

Nyt A = 00010010 + 11110111 + 1

          A = 00001010 (vastaa desimaalilukua 10)

Lopulta A sai B:n arvon. Siten vaihto saatiin päätökseen.

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?

Termi ylivuoto tarkoittaa rajan ylittämistä. Aritmeettinen ylivuoto tarkoittaa, että minkä tahansa aritmeettisen toimenpiteen tulos ylittää tietokonearkkitehtuurin lukuesitysalueen tai rajan. Jos luku esimerkiksi jaetaan nollalla, siitä tulee ääretön, eikä tietokoneen numerojärjestelmä voi pitää sitä 32 tai 64 bitissä.

Kokonaislukuesitys
Kokonaislukuesitys 32-bittisessä järjestelmässä

Aritmeettisen ylivuodon seuraus voi olla:

  • Kahden positiivisen luvun yhteenlaskemisesta tulee negatiivinen. Koska etumerkkibitistä voi tulla 1, mikä tarkoittaa negatiivista lukua.
  • Kahden negatiivisen luvun yhteenlaskemisesta tulee positiivinen. Koska etumerkkibitistä voi tulla 0, mikä tarkoittaa positiivista lukua.

Päivittäinen Guru99-uutiskirje

Aloita päiväsi uusimmilla ja tärkeimmillä tekoälyuutisilla, jotka toimitetaan juuri nyt.