Python 세 번째 변수를 사용하지 않고 두 숫자를 바꾸는 프로그램
⚡ 스마트 요약
교환ping 세 번째 변수가 없는 두 숫자는 산술 덧셈과 뺄셈을 사용하여 제자리에서 값을 교환합니다.trac비트 단위 XOR 연산자 또는 비트 단위 산술 트릭. Python 튜플 언패킹과 직접 교환할 수도 있습니다.
아래 섹션에서는 임시 변수 없이 값을 교환하는 네 가지 방법과 산술 오버플로에 대해 설명합니다.
프로그래밍 언어에서, 바꾸기ping 변수 값을 서로 바꾸는 것을 의미합니다. 변수에는 숫자, 문자열, 리스트 또는 배열, 객체 등이 포함될 수 있습니다. 변수 값을 바꾸는 일반적인 방법은 다음과 같습니다.ping 값을 저장하기 위해 임시 변수를 사용하는 것입니다. 예를 들어,
스왑의 일반적인 단계ping 두 숫자는 다음과 같습니다.
- 임시 변수 C를 선언합니다.
- A의 값을 C에 할당합니다. 즉, C = A입니다. 이제 C = 20입니다.
- B의 값을 A에 할당하므로 A = 30
- C의 값을 B에 할당합니다. 따라서 C의 값은 20이므로 B = 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
우리는 B에서 A의 값을 얻었음을 알 수 있습니다.
조건 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인 경우를 보여주는 예시입니다.
Bitwise XOR를 사용하여 스왑 Opera바위 산
이 방법은 XOR 스왑이라고도 합니다. XOR은 배타적 논리합(Exclusive OR)을 의미합니다. 이 비트 연산에서는 두 비트를 입력으로 사용합니다. XOR 연산에서 하나의 출력을 얻으려면 두 입력 중 하나만 1이어야 합니다. 그렇지 않으면 출력은 0이 됩니다. 다음 표는 입력 A와 B의 모든 조합에 대한 출력을 보여줍니다.
비트 연산을 사용하여 두 숫자를 바꾸려면 XOR 연산의 작동 방식을 알아야 합니다. 다음은 A와 B를 입력값으로 하는 XOR 연산에 대한 표입니다.
| 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 |
| A ^ B | 0 | 0 | 1 | 1 |
이제 A = 0011(이진수)입니다.
조건 2 : B = A^B
| A | 0 | 0 | 1 | 1 |
| B | 0 | 1 | 1 | 1 |
| A ^ B | 0 | 1 | 0 | 0 |
따라서 B = 0100, 이는 A의 초기 이진값입니다.
조건 3 : A = A^B
| A | 0 | 0 | 1 | 1 |
| B | 0 | 1 | 0 | 0 |
| A ^ B | 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 비트 산술 사용
이 방법은 산술적인 방법과 동일하지만, 덧셈과 뺄셈을 수행하기 위해 AND, OR, 보수와 같은 비트 연산을 사용합니다.trac단계별 설명에 앞서 "보완"이라는 단어를 간단히 살펴보겠습니다.
1의 보수란 모든 0을 1로, 모든 1을 0으로 바꾸는 것을 의미합니다. 예를 들어 보겠습니다.
- 23이라는 소수를 예로 들어 보겠습니다.
- 이진수로 변환하면 10111이 됩니다. 5비트밖에 없지만 컴퓨터는 8, 16, 32, 64비트 등으로 숫자를 저장합니다. 따라서 이진수 앞에 0을 추가해 보겠습니다. 이렇게 해도 숫자의 원래 값은 변하지 않습니다. 그러면 이진수는 10111이 됩니다. 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의 이진수입니다.
요약하면 숫자 A에 대한 2의 보수를 수행하면 다음과 같습니다.
A의 2의 보수 = (~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진수 XNUMX과 같습니다.
조건 3 : A = A + (~B) + 1
이는 A = AB와 같습니다.
이제 A = 00010010 + 11110111 + 1
A = 00001010(10진수 XNUMX에 해당)
결국 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
산술 오버플로란 무엇입니까?
오버플로우라는 용어는 한계를 초과하는 것을 의미합니다. 산술 오버플로우는 어떤 산술 연산의 결과가 컴퓨터 아키텍처의 숫자 표현 범위 또는 한계를 초과하는 것을 말합니다. 예를 들어, 어떤 수를 0으로 나누면 그 수는 무한대가 되는데, 컴퓨터의 숫자 체계는 이를 32비트나 64비트로 표현할 수 없습니다.
32비트 시스템의 정수 표현
산술 오버플로의 결과는 다음과 같습니다.
- 두 양수를 더하면 부호 비트가 1이 되어 음수가 될 수 있으므로 결과가 음수가 됩니다.
- 두 음수를 더하면 부호 비트가 0이 되어 양수가 되기 때문에 결과가 양수가 됩니다.




