Python Програма за размяна на две числа без използване на трета променлива
⚡ Умно обобщение
размянаping Две числа без трета променлива разменят стойностите си на място, използвайки аритметично събиране и извличане.tracция, побитовия XOR оператор или побитовите аритметични трикове. Python може също да се разменя директно с разопаковане на кортеж.
Разделите по-долу обхващат четири начина за размяна без временна променлива, плюс аритметично препълване.
В езиците за програмиране, размянатаping означава размяна на стойностите на две променливи. Променливата може да съдържа число, низ, списък или масив, обект и т.н. Общият начин на размянаping е да се използва временна променлива за съхранение на стойности. Например
Общи стъпки на размянатаping две числа са:
- Декларирайте временна променлива C
- Присвоете стойността на A на C, което означава C = A. Сега C = 20
- Присвоете стойността на B на A, така че A = 30
- Присвоете стойността на C на B, така че B = 20, тъй като C има стойност 20.
Ето как се разменятping се извършва с помощта на временна променлива и работи както за цели, така и за числа с плаваща запетая.
Разменете с помощта на аритметично уравнение
Както знаем, размянатаping означава да се размени съдържанието на два обекта, полета или променливи. Размяната с помощта на аритметична операция означава извършване на размяната с помощта на математическо уравнение, т.е. събиране и извличанеtracТА.
Ако ни бъдат дадени две числа и ни бъде поискано да ги разменим, без да използваме временна променлива, тогава, използвайки три аритметични уравнения, можем да разменим числата.
Псевдокод за размянаping числа, използващи аритметична операция:
A = A + B B = A - B A = A - B
Да предположим, че имаме две числа, A = 20 и B = 30.
Условие 1: A = A+B
Така че, текущата стойност на A е 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. В този пример ще използваме операция XOR с 3. В повечето езици за програмиране 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 използвайки побитова аритметика
Този метод е същият като аритметичния метод, но ще използваме побитови операции като И, ИЛИ и допълнение, за да извършим събиране и извличане на данни.tracция. Преди да преминем към стъпките, нека набързо разгледаме „допълване“.
Допълнението до 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
От горното обсъждане, ако трябва да извършим под-tracция, извършваме допълнение до 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. По този начин, размянатаping беше завършен.
Програма на 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, което означава положително число.




