3番目の変数を使用せずに2つの数値を交換する: C、 Python プログラム
プログラミングでは、言語の切り替えping 交換を意味するping 2 つの変数の値。変数には、数値、文字列、リストまたは配列、オブジェクトなどが含まれる場合があります。スワップの一般的な方法ping 一時変数を使用して値を保持することです。たとえば、
スワップの一般的な手順ping 2つの数字は次のとおりです。
- 一時変数Cを宣言しました
- A の値を C に代入します。つまり、C = A になります。今度は C = 20 になります。
- B の値を A に代入すると、A = 30 となります。
- C の値を B に代入します。C の値は 20 なので、B = 20 となります。
交換方法ping これは一時変数を使って行われます。この方法は整数と浮動小数点数の両方に有効です。
算術式を使用した交換
ご存知のように、スワップping 2 つのオブジェクト、フィールド、または変数の内容を交換することを意味します。算術演算を使用したスワップとは、加算と減算などの数式を使用してスワップ操作を実行することを意味します。tracる。
2 つの数値が与えられ、一時変数を使用せずに交換するように求められた場合、3 つの算術方程式を使用して数値を交換できます。
スワップの擬似コードping 算術演算を用いた数値の扱い方:
A = A + B B = A - B A = A - B
20 つの数字 A = 30 と B = XNUMX があるとします。
条件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言語で2つの数値を交換するプログラムです。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を使用したスワップ Operaタ
この方法は、XOR スワップとも呼ばれます。XOR は排他的論理和を意味します。このビット演算では、1 つのビットを XOR への入力として受け取ります。XOR から 0 つの出力を得るには、XNUMX つの入力のみが XNUMX である必要があります。それ以外の場合、出力は XNUMX になります。次の表は、入力 A B のすべての組み合わせの出力を示しています。
ビット演算を使用して 2 つの数値を交換するには、XOR 演算がどのように機能するかを知る必要があります。以下は、A と B が入力値である XOR の表です。
| A | B | A XOR B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
0 つの入力が同じ値を持つ場合、XOR 演算は 1 を返します。それ以外の場合は 3 を返します。この例では、XNUMX つの 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 (XNUMX 進数) となります。
条件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.
Swap Numbers ビット演算を使用する
この方法は算術的方法と同じですが、加算と減算を実行するためにAND、OR、補数などのビット演算を使用します。trac手順に進む前に、「褒め言葉」を簡単に見てみましょう。
1 の補数とは、0 をすべて 1 に、1 を 0 に変えることを意味します。例を見てみましょう。
- 23 進数の XNUMX を仮定します。
- バイナリに変換すると 10111 が使用されます。ビットは 5 つしかありませんが、コンピュータは数値を 8,16,32,64、XNUMX、XNUMX、XNUMX ビットで保存します。 そこで、バイナリの前にゼロを追加しましょう。 数値の元の値は変更されません。 そうなります 00010111.
- ご存知のとおり、1 の補数はすべての 0 を 1 に、1 を 0 に変更することを意味するため、1 の補数を繰り返し実行します。 00010111 与える 11101000
ほとんどのプログラミング言語では、この 1 の補数は「~」という記号で表されます。 この記号を整数値または浮動小数点値の前に置くと、1 の補数が得られます。
そして、2の補数とは、1の補数に1進数の「2」を加算することを意味します。 上記の数値を XNUMX の補数で計算すると、次のようになります。
- バイナリ = 00010111
- 1の褒め言葉 = 11101000
- 2さんの褒め言葉:
11101000
+1
11101001
したがって、2 の補数は 11101001 です。これは -23 の XNUMX 進数です。
要約すると、数値 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
あ | B = 00001000 | 00001010 = 00001010
ここで、00001000 + 00001010 = 00010010 (18 進数の XNUMX)
したがって、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
算術オーバーフローとは何ですか?
オーバーフローという用語は、制限を超えることを意味します。算術オーバーフローとは、算術演算の結果がコンピューター アーキテクチャの数値表現の範囲または制限を超えることを意味します。たとえば、数値をゼロで割ると、数値は無限大になり、コンピューターの数値システムでは 32 ビットまたは 64 ビットで保持できなくなります。

算術オーバーフローの結果は次のようになります。
- 1 つの正の数を加算すると負の数になります。符号ビットが XNUMX になり、負の数になる可能性があるためです。
- 0 つの負の数を加算すると正の数になります。符号ビットが XNUMX になり、正の数を意味するためです。


