세 번째 변수를 사용하지 않고 두 숫자를 교환합니다: C, Python 프로그램

프로그래밍에서 언어 교환이란 두 변수의 값을 바꾸는 것을 의미합니다. 변수에는 숫자, 문자열, 목록 또는 배열, 객체 등이 포함될 수 있습니다. 일반적인 교환 방법은 임시 변수를 사용하여 값을 보유하는 것입니다. 예를 들어,

2개 교환 Numbers

두 숫자를 바꾸는 일반적인 단계는 다음과 같습니다.

  • 임시 변수 C를 선언했습니다.
  • A의 값을 C에 할당합니다. 즉, C = A입니다. 이제 C = 20입니다.
  • B의 값을 A에 할당하므로 A = 30
  • C의 값을 B에 할당합니다. 따라서 C의 값은 20이므로 B = 20입니다.

임시 변수의 도움으로 스와핑이 이루어지는 방식입니다. 이 방법은 정수와 실수 모두에 적용됩니다.

산술 방정식을 사용하여 바꾸기

알다시피, 스왑은 두 객체나 필드 또는 변수의 내용을 교환하는 것을 의미합니다. 산술 연산을 사용하여 스왑한다는 것은 수학 방정식, 즉 덧셈과 뺄셈을 사용하여 스왑 연산을 수행하는 것을 의미합니다.

두 개의 숫자가 주어지고 임시 변수를 사용하지 않고 숫자를 바꾸라는 요청을 받으면, 세 개의 산술 방정식을 사용하여 숫자를 바꿀 수 있습니다.

산술 연산을 사용하여 숫자를 바꾸기 위한 의사 코드:

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은 배타적 OR을 의미합니다. 이 비트 연산에서 XOR에 대한 입력으로 두 비트를 사용합니다. 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진수 = 7) 및 B=0111(XNUMX진수, XNUMX)이라고 가정합니다.

조건 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, Compliment와 같은 비트 연산을 사용하여 덧셈과 뺄셈을 수행합니다. 단계로 넘어가기 전에 "Compliment"를 잠깐 살펴보겠습니다.

1의 보수는 0을 1로, 1을 0으로 모두 바꾸는 것을 의미합니다. 예를 들어보겠습니다.

  • 십진수인 23이라는 숫자를 가정해 보겠습니다.
  • 바이너리로 변환하면 10111이 사용됩니다. 5비트만 있지만 컴퓨터는 8,16,32,64 ..비트로 숫자를 저장합니다. 이제 Binary 앞에 XNUMX을 추가해 보겠습니다. 숫자의 원래 값은 변경되지 않습니다. 그래서 그것은 될 것입니다 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

위의 논의에서 뺄셈을 수행해야 할 경우 음수에 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의 값을 얻었습니다. 이로써 교환이 완료되었습니다.

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비트나 XNUMX비트로 저장할 수 없습니다.

정수 표현
32비트 시스템의 정수 표현

산술 오버플로의 결과는 다음과 같습니다.

  • 두 개의 양수를 더하면 음수가 됩니다. 부호 비트가 1이 될 수 있기 때문입니다. 즉, 음수를 의미합니다.
  • 두 개의 음수를 더하면 양수가 됩니다. 부호 비트가 0이 될 수 있기 때문입니다. 즉, 양수를 의미합니다.