Разменете две числа, без да използвате трета променлива: C, Python Програма

В програмирането размяната на език означава размяна на стойността на две променливи. Променливата може да съдържа число, низ, списък или масив, обект и т.н. Общият начин за размяна е да се използва временна променлива за съхранение на стойности. например,

Разменете две Numbers

Общите стъпки за размяна на две числа са:

  • Декларира временна променлива C
  • Присвоете стойността на A на C, което означава C = A. Сега C = 20
  • Присвоете стойността на B на A, така че A = 30
  • Присвоете стойността на C на B, така че B = 20, тъй като C има стойност 20.

Така се извършва размяната с помощта на временна променлива. Този метод ще работи както за цели числа, така и за числа с плаваща единица.

Разменете с помощта на аритметично уравнение

Както знаем, размяната означава размяна на съдържанието на два обекта, полета или променливи. Размяна чрез аритметична операция означава извършване на операцията за размяна с помощта на математическото уравнение, т.е. събиране и изваждане.

Ако ни бъдат дадени две числа и сме помолени да разменим, без да използваме временна променлива, тогава използвайки три аритметични уравнения, можем да разменим числата.

Псевдокод за размяна на числа чрез аритметична операция:

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

Да приемем, че имаме две числа, A = 20 и B = 30.

Условие 1:    A = A+B

                  И така, текущата стойност на А е 20+30 = 50

Условие 2:    B = AB

                   Сега B = 50-30 = 20
                   Можем да видим, че получихме стойността на A в B

Условие 3:    A = AB

                   И накрая, A = 50-20 = 30
                   A има началната стойност на B.

И така, ние просто разменихме числата.

Ето програмата за размяна на две числа в 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);
}

Изход:

Enter value of A: 20
Enter value of B: 30
A = 20 , B = 30
Now, A = 30 , B = 20

Програма в 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))

Изход:

Enter value of A: 20
Enter value of B: 30
A = 20 , B = 30
Now, A = 30 , B = 20

Сега в Python, дори не е необходимо да извършваме аритметични операции. Можем да използваме:

a,b = b,a

Ето една демонстрация, където a=20, b=30;

Разменете с помощта на аритметично уравнение

Разменете с помощта на побитово XOR OperaTor

Този метод е известен също като XOR суап. XOR означава изключително ИЛИ. Ние приемаме два бита като входни данни за XOR в тази побитова операция. За да получите един изход от XOR, само един вход трябва да бъде 1. В противен случай изходът ще бъде 0. Следната таблица показва изхода за всички комбинации от вход A B.

Трябва да знаем как работи операцията XOR, за да разменим две числа, използвайки побитовата операция. Ето таблица за XOR, където A и B са входни стойности.

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

Ако два входа имат една и съща стойност, тогава операцията XOR дава 0; в противен случай 1. За този пример ще използваме операция 3 XOR. В повечето езици за програмиране XOR се обозначава като “^”.

Да приемем, че A=4 (в двоичен = 0100) и B=7 (в двоичен, 0111)

Условие 1:    A = A ^ B

A 0 1 0 0
B 0 1 1 1
А ^ Б 0 0 1 1

Сега A = 0011 (в двоичен код).

Условие 2:    B = A^B

A 0 0 1 1
B 0 1 1 1
А ^ Б 0 1 0 0

Така че B = 0100, което беше първоначалната двоична стойност на A.

Условие 3:    A = A^B

A 0 0 1 1
B 0 1 0 0
А ^ Б 0 1 1 1

И накрая, A = 0111, което е еквивалентната двоична стойност на B.

Програма на 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);
}

Изход:

Enter value of A:4
Enter value of B:7
A=4, B=7
Now, A=7, B=4.

Програма в 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))

Изход:

Enter the value of A:10
Enter the value of B:15
A=10 and B=15
Now, A=15,B=10.

размяна Numbers използвайки побитова аритметика

Този метод е същият като аритметичния метод, но ще използваме побитови операции като И, ИЛИ и Комплимент, за да извършваме събиране и изваждане. Преди да преминем към стъпките, нека прегледаме бързо „Комплимент“.

Допълването на 1 означава да промените всички 0 на 1 и 1 на 0. Нека дадем пример.

  • Да приемем число 23, десетично число.
  • Преобразуването в двоичен дава използване на 10111. Има само 5 бита, но компютърът съхранява числото в 8,16,32,64 .. бита. Така че нека добавим нула пред двоичния файл. Това няма да промени първоначалната стойност на числото. Така ще стане 00010111.
  • Както знаем, комплиментът на 1 означава да промените всички 0 на 1 и 1 на 0, така че изпълнението на допълнение на 1 над 00010111 дава 11101000

Това допълнение на 1 е представено с “~” този символ в повечето езици за програмиране. Поставянето на този символ преди всички цели числа или стойности с плаваща запетая ще даде допълнение на 1.

И допълнението на 2 означава добавяне на двоично „1” към допълнението на 1. Ако направим допълнение на 2 към горното число:

  • Двоично = 00010111
  • Комплимент за 1 = 11101000
  • Комплимент на 2:

          11101000

          + 1

          11101001

И така, допълнението на 2 е 11101001. Това е двоичното число за -23.
В обобщение, за изпълнение на допълнение на 2 на число A, ще изглежда така:

2 допълнение към A = (~A) + 1

Сега нека приемем A=8 (двоичен 00001000), B=10(00001010)

Условие 1:    A = (A & B) + (A | B)

                   Това е еквивалентно на A = A + B.

                   A & B = 00001000 & 00001010 = 00001000

                   A | B = 00001000 | 00001010 = 00001010

Сега, 00001000 + 00001010 = 00010010 (десетичен знак 18)

И така, A = 18

Условие 2: B = A + (~B) + 1

                   Негов еквивалент на B = AB

Тук B = A – B

От горната дискусия, ако трябва да извършим изваждане, извършваме допълнение на 2 към отрицателното число и след това го добавяме.

И така, -B = ~B + 1

Сега B = 00010010 + (11110101) + 1 = 00001000

Стойността на B е еквивалентна на десетичната 8, която беше първоначалната стойност.

Условие 3: A = A + (~B) + 1

                   Негов еквивалент на A = AB

Сега A = 00010010 + 11110111 + 1

          A = 00001010 (еквивалентно на десетична запетая 10)

Накрая A получи стойността на B. Така размяната беше завършена.

Програма на 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);
}

Изход:

Enter the value of A: 8
Enter the value of B:10
A=8, B=10
Now, A=10, B=8

Програма в 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))

Изход:

Enter the value of A: 25
Enter the value of B: 25
A = 25 and B = 25
Now, A = 25 and B = 25

Какво е аритметично препълване?

Терминът препълване означава превишаване на лимита. Аритметичното препълване означава, че резултатът от която и да е аритметична операция надхвърля диапазона или границата на представянето на числата на компютърната архитектура. Например, ако едно число се раздели на нула, то става безкрайно и компютърната бройна система не може да го задържи в 32 или 64 бита.

Представяне на цели числа
Представяне на цели числа в 32-битова система

Последствието от аритметичното препълване може да бъде:

  • Добавянето на две положителни числа става отрицателно. Тъй като знаковият бит може да стане 1, което означава отрицателно число.
  • Събирането на две отрицателни числа става положително. Тъй като знаковият бит може да стане 0, което означава положително число.