Cseréljen fel két számot harmadik változó használata nélkül: C, Python Program

A programozásban a nyelvcsere két változó értékének felcserélését jelenti. A változó tartalmazhat számot, karakterláncot, listát vagy tömböt, objektumot stb. A csere általános módja az, hogy egy ideiglenes változót használunk az értékek megtartására. Például,

Cserélj kettőt Numbers

A két szám felcserélésének általános lépései a következők:

  • Egy ideiglenes C változót deklarált
  • Rendelje A értékét C-hez, ami azt jelenti, hogy C = A. Most C = 20
  • Rendelje B értékét A-hoz, tehát A = 30
  • Rendelje C értékét B-hez, tehát B = 20, mivel C értéke 20.

Így történik a csere egy ideiglenes változó segítségével. Ez a módszer egész számok és lebegőpontos számok esetén is működik.

Csere az aritmetikai egyenlet segítségével

Mint tudjuk, a csere két objektum vagy mező vagy változó tartalmának felcserélését jelenti. A csere aritmetikai művelettel azt jelenti, hogy a swap műveletet a matematikai egyenlet, azaz az összeadás és a kivonás segítségével hajtjuk végre.

Ha kapunk két számot, és ideiglenes változó nélkül cseréljük fel, akkor három aritmetikai egyenlet segítségével felcserélhetjük a számokat.

Pszeudokód számok cseréjéhez aritmetikai művelettel:

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

Tegyük fel, hogy két számunk van, A = 20 és B = 30.

1. feltétel:    A = A+B

                  Tehát A jelenlegi értéke 20+30 = 50

2. feltétel:    B = AB

                   Most B = 50-30 = 20
                   Láthatjuk, hogy megkaptuk A értékét B-ben

3. feltétel:    A = AB

                   Végül A = 50-20 = 30
                   A kezdeti értéke B.

Szóval felcseréltük a számokat.

Itt van a program két szám felcserélésére 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: 20
Enter value of B: 30
A = 20 , B = 30
Now, A = 30 , B = 20

Program be 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

Most Python, még számtani műveleteket sem kell végrehajtanunk. Használhatjuk:

a,b = b,a

Itt van egy demonstráció, ahol a=20, b=30;

Csere az aritmetikai egyenlet segítségével

Csere a Bitwise XOR használatával Operator

Ez a módszer XOR csereként is ismert. Az XOR jelentése kizárólagos VAGY. Ebben a bitenkénti műveletben két bitet veszünk bemenetként az XOR-ba. Ahhoz, hogy az XOR-ból egy kimenetet kapjunk, csak egy bemenetnek kell 1-nek lennie. Ellenkező esetben a kimenet 0 lesz. A következő táblázat az A B bemenet összes kombinációjának kimenetét mutatja.

Tudnunk kell, hogyan működik az XOR művelet két szám felcseréléséhez a bitenkénti művelettel. Itt van egy táblázat az XOR-hoz, ahol A és B a bemeneti értékek.

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

Ha két bemenet azonos értékű, akkor az XOR művelet 0-t ad; egyébként 1. Ebben a példában 3 XOR műveletet fogunk használni. A legtöbb programozási nyelvben az XOR-t „^”-ként jelölik.

Tegyük fel, hogy A=4 (binárisban = 0100) és B=7 (binárisban 0111)

1. feltétel:    A = A ^ B

A 0 1 0 0
B 0 1 1 1
A^B 0 0 1 1

Most A = 0011 (binárisan).

2. feltétel:    B = A^B

A 0 0 1 1
B 0 1 1 1
A^B 0 1 0 0

Tehát B = 0100, ami A kezdeti bináris értéke volt.

3. feltétel:    A = A^B

A 0 0 1 1
B 0 1 0 0
A^B 0 1 1 1

Végül A = 0111, amely B ekvivalens bináris értéke volt.

Program 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.

Program be 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.

Csere Numbers bitenkénti aritmetika használatával

Ez a módszer megegyezik az aritmetikai módszerrel, de az összeadás és a kivonás végrehajtásához bitenkénti műveleteket fogunk használni, mint például az ÉS, VAGY és a Compliment. Mielőtt a lépcsőhöz mennénk, gyorsan nézzük át a „Bók”-ot.

Az 1-es komplementer azt jelenti, hogy az összes 0-t 1-re és 1-et 0-ra változtatunk. Nézzünk egy példát.

  • Tételezzünk fel egy 23-as számot, egy decimális számot.
  • A binárissá konvertálás az 10111-et adja. Csak 5 bit van, de a számítógép 8,16,32,64 .. bitben tárolja a számokat. Tehát adjunk hozzá nullát a bináris elé. Nem változtatja meg a szám eredeti értékét. Szóval lesz belőle 00010111.
  • Mint tudjuk, az 1-es bók azt jelenti, hogy az összes 0-t 1-re és 1-et 0-ra változtatunk, tehát az 1-es komplementerének végrehajtása 00010111 ad 11101000

Ennek az 1-nek a kiegészítése a legtöbb programozási nyelvben a „~” szimbólummal van jelölve. Ha ezt a szimbólumot bármely egész vagy lebegőpontos érték elé helyezi, akkor az 1 komplementerét kapja.

A 2-es komplementere pedig azt jelenti, hogy bináris „1”-et adunk az 1-es komplementeréhez. Ha a fenti számhoz 2 kiegészítést teszünk:

  • Bináris = 00010111
  • 1-es bók = 11101000
  • 2 dicsérete:

          11101000

          + 1

          11101001

Tehát a 2 komplementere 11101001. Ez a -23 binárisa.
Összefoglalva, egy A szám 2-es kiegészítésének végrehajtása a következőképpen fog kinézni:

2 komplementere A = (~A) + 1

Most tegyük fel, hogy A=8 (bináris 00001000), B=10(00001010)

1. feltétel:    A = (A és B) + (A | B)

                   Egyenértékű: A = A + B.

                   A és B = 00001000 és 00001010 = 00001000

                   A | B = 00001000 | 00001010 = 00001010

Most, 00001000 + 00001010 = 00010010 (tizedesjegy 18)

Tehát A = 18

2. feltétel: B = A + (~B) + 1

                   Egyenértékű: B = AB

Itt B = A – B

A fentiekből kiindulva, ha kivonást kell végrehajtanunk, akkor a negatív számhoz 2-es kiegészítést hajtunk végre, majd összeadjuk.

Tehát -B = ~B + 1

Most B = 00010010 + (11110101) + 1 = 00001000

B értéke megegyezik a 8-as decimális számmal, amely a kezdeti érték volt.

3. feltétel: A = A + (~B) + 1

                   Egyenértékű: A = AB

Most A = 00010010 + 11110111 + 1

          A = 00001010 (egyenértékű a 10-es decimális számmal)

Végül A megkapta B értékét. Így a csere befejeződött.

Program 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

Program be 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

Mi az aritmetikai túlcsordulás?

A túlcsordulás kifejezés a határérték túllépését jelenti. Az aritmetikai túlcsordulás azt jelenti, hogy bármely aritmetikai művelet eredménye meghaladja a számítógép-architektúra számábrázolási tartományát vagy határát. Például, ha egy számot elosztunk nullával, akkor végtelenné válik, és a számítógépes számrendszer nem tudja 32 vagy 64 bitben tartani.

Egész számok ábrázolása
Egész számok ábrázolása 32 bites rendszerben

Az aritmetikai túlcsordulás következménye lehet:

  • Két pozitív szám összeadása negatívvá válik. Mert az előjelbit lehet 1, ami negatív számot jelent.
  • Két negatív szám összeadása pozitív lesz. Mert az előjelbit 0 lehet, ami pozitív számot jelent.