Python Programma per scambiare due numeri senza utilizzare una terza variabile
⚡ Riepilogo intelligente
scambiareping due numeri senza una terza variabile scambiano i loro valori sul posto usando l'addizione aritmetica e la sottrazionetraczione, l'operatore XOR bit a bit, o trucchi di aritmetica bit a bit. Python è possibile anche effettuare lo scambio direttamente tramite l'estrazione della tupla.
Le sezioni seguenti illustrano quattro metodi per effettuare scambi senza utilizzare una variabile temporanea, oltre al problema dell'overflow aritmetico.
Nei linguaggi di programmazione, lo scambioping significa scambiare i valori di due variabili. La variabile può contenere un numero, una stringa, una lista o un array, un oggetto, ecc. Il modo generale di scambioping consiste nell'utilizzare una variabile temporanea per memorizzare i valori. Ad esempio,
Le fasi generali dello scambioping due numeri sono:
- Dichiarare una variabile temporanea C
- Assegna il valore di A a C, ovvero C = A. Ora C = 20
- Assegna il valore di B ad A, quindi A = 30
- Assegna il valore di C a B, quindi B = 20, poiché C ha il valore 20.
Ecco come si scambiaping Questo viene fatto con l'aiuto di una variabile temporanea e funziona sia per numeri interi che per numeri decimali.
Scambia utilizzando l'equazione aritmetica
Come sappiamo, lo scambioping significa scambiare il contenuto di due oggetti, campi o variabili. Scambiare usando un'operazione aritmetica significa eseguire lo scambio usando un'equazione matematica, cioè addizione e sottrazione.traczione.
Se ci vengono dati due numeri e ci viene chiesto di scambiarli senza usare una variabile temporanea, allora possiamo scambiarli utilizzando tre equazioni aritmetiche.
Pseudocodice per lo scambioping numeri utilizzando un'operazione aritmetica:
A = A + B B = A - B A = A - B
Supponiamo di avere due numeri, A = 20 e B = 30.
Condizione 1: A = A+B
Quindi, il valore attuale di A è 20+30 = 50
Condizione 2: B = AB
Ora, B = 50-30 = 20
Possiamo constatare di aver ottenuto il valore di A in B.
Condizione 3: A = AB
Infine, A = 50-20 = 30
A ha il valore iniziale di B.
Quindi abbiamo semplicemente scambiato i numeri.
Ecco il programma per scambiare due numeri in 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); }
Produzione:
Enter value of A: 20 Enter value of B: 30 A = 20 , B = 30 Now, A = 30 , B = 20
Programma in 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))
Produzione:
Enter value of A: 20 Enter value of B: 30 A = 20 , B = 30 Now, A = 30 , B = 20
Ora in Python, non abbiamo nemmeno bisogno di eseguire operazioni aritmetiche. Possiamo usare:
a,b = b,a
Ecco una dimostrazione in cui a=20, b=30;
Scambio tramite XOR bit a bit Operator
Questo metodo è anche noto come scambio XOR. XOR significa OR esclusivo. In questa operazione bit a bit, utilizziamo due bit come input per l'operazione XOR. Per ottenere un output dall'operazione XOR, è sufficiente che uno solo degli input sia 1. Altrimenti, l'output sarà 0. La tabella seguente mostra l'output per tutte le combinazioni di input A e B.
Dobbiamo capire come funziona l'operazione XOR per scambiare due numeri utilizzando l'operazione bit a bit. Ecco una tabella per l'operazione XOR, dove A e B sono i valori di input.
| A | B | A XOR B |
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
Se due input hanno lo stesso valore, l'operazione XOR restituisce 0; altrimenti, 1. In questo esempio, utilizzeremo un'operazione XOR a 3. Nella maggior parte dei linguaggi di programmazione, l'operazione XOR è indicata con il simbolo "^".
Supponiamo che A=4 (in binario = 0100) e B=7 (in binario, 0111)
Condizione 1: A = A^B
| A | 0 | 1 | 0 | 0 |
| B | 0 | 1 | 1 | 1 |
| A^B | 0 | 0 | 1 | 1 |
Ora, A = 0011 (in binario).
Condizione 2: B = A^B
| A | 0 | 0 | 1 | 1 |
| B | 0 | 1 | 1 | 1 |
| A^B | 0 | 1 | 0 | 0 |
Quindi B = 0100, che era il valore binario iniziale di A.
Condizione 3: A = A^B
| A | 0 | 0 | 1 | 1 |
| B | 0 | 1 | 0 | 0 |
| A^B | 0 | 1 | 1 | 1 |
Infine, A = 0111, che era il valore binario equivalente di B.
Programma in 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); }
Produzione:
Enter value of A:4 Enter value of B:7 A=4, B=7 Now, A=7, B=4.
Programma in 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))
Produzione:
Enter the value of A:10
Enter the value of B:15
A=10 and B=15
Now, A=15,B=10.
scambiare Numbers utilizzando l'aritmetica bit a bit
Questo metodo è lo stesso del metodo aritmetico, ma useremo operazioni bit a bit come AND, OR e complemento per eseguire addizioni e sottrazioni.tracPrima di passare ai passaggi, diamo una rapida occhiata al concetto di "complemento".
Il complemento a uno significa trasformare tutti gli 0 in 1 e tutti gli 1 in 0. Facciamo un esempio.
- Supponiamo di considerare il numero 23 come un numero decimale.
- La conversione in binario ci dà 10111. Ci sono solo 5 bit, ma il computer memorizza i numeri in 8, 16, 32, 64... bit. Quindi aggiungiamo uno zero davanti al binario. Questo non cambierà il valore originale del numero. Quindi diventerà 00010111.
- Come sappiamo, il complemento a 1 significa cambiare tutti gli 0 in 1 e tutti gli 1 in 0, quindi eseguire il complemento a 1 su 00010111 dà 11101000.
Il complemento a uno è rappresentato dal simbolo "~" nella maggior parte dei linguaggi di programmazione. Anteponendo questo simbolo a qualsiasi valore intero o a virgola mobile si ottiene il complemento a uno.
E complemento a 2 significa aggiungere “1” binario al complemento a 1. Se facciamo il complemento a 2 al numero sopra:
- Binario = 00010111
- Complemento a 1 = 11101000
- Complemento a due:
11101000
+ 1
11101001
Quindi, il complemento a 2 è 11101001. Questo è il binario per -23.
In sintesi, per eseguire il complemento a 2 di un numero A, sarà simile a:
Complemento a 2 di A = (~A) + 1
Ora supponiamo che A=8 (binario 00001000), B=10 (00001010)
Condizione 1: A = (A e B) + (A | B)
È equivalente a A = A + B.
A e B = 00001000 e 00001010 = 00001000
A | B = 00001000 | 00001010 = 00001010
Ora, 00001000 + 00001010 = 00010010 (decimale 18)
Quindi A = 18
Condizione 2: B = LA + (~B) + 1
È equivalente a B = AB
Qui, B = A – B
Dalla discussione precedente, se dobbiamo eseguire un subtracIn questo caso, eseguiamo il complemento a due del numero negativo e poi lo aggiungiamo.
Quindi, -B = ~B + 1
Ora, B = 00010010 + (11110101) + 1 = 00001000
Il valore di B è equivalente al decimale 8, che era il valore iniziale.
Condizione 3: LA = LA + (~B) + 1
È equivalente ad A = AB
Ora, A = 00010010 + 11110111 + 1
A = 00001010 (equivalente a 10 decimale)
Infine, A ha ottenuto il valore di B. Quindi, lo scambioping è stato completato.
Programma in 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); }
Produzione:
Enter the value of A: 8 Enter the value of B:10 A=8, B=10 Now, A=10, B=8
Programma in 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))
Produzione:
Enter the value of A: 25 Enter the value of B: 25 A = 25 and B = 25 Now, A = 25 and B = 25
Che cos'è l'overflow aritmetico?
Il termine overflow significa superamento del limite. L'overflow aritmetico si verifica quando il risultato di un'operazione aritmetica supera l'intervallo o il limite della rappresentazione numerica dell'architettura del computer. Ad esempio, se un numero viene diviso per zero, diventa infinito e il sistema numerico del computer non può rappresentarlo con 32 o 64 bit.
Rappresentazione di numeri interi in un sistema a 32 bit
La conseguenza dell'overflow aritmetico può essere:
- La somma di due numeri positivi dà come risultato un numero negativo, perché il bit di segno potrebbe diventare 1, ovvero un numero negativo.
- La somma di due numeri negativi dà come risultato un numero positivo, perché il bit di segno potrebbe diventare 0, indicando quindi un numero positivo.




