세 번째 변수를 사용하지 않고 두 숫자 바꾸기: C, Python 프로그램

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

두 개의 숫자 바꾸기

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

  • 임시 변수 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인 데모입니다.

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

비트별 XOR 연산자를 사용하여 교환

이 방법을 XOR 스왑이라고도 합니다. XOR은 배타적 OR을 의미합니다. 이 비트 연산에서는 1비트를 XOR에 대한 입력으로 사용합니다. XOR에서 하나의 출력을 얻으려면 하나의 입력만 0이어야 합니다. 그렇지 않으면 출력은 XNUMX이 됩니다.wing 표는 입력 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.

비트 산술을 사용하여 숫자 바꾸기

이 방법은 산술 방법과 동일하지만 AND, OR, 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이 되어 양수를 의미할 수 있기 때문입니다.