Python Programa para intercambiar dos números sin usar una tercera variable.

⚡ Resumen inteligente

Intercambio ping Dos números sin una tercera variable intercambian sus valores en el mismo lugar mediante suma aritmética y resta.tracción, el operador XOR bit a bit o trucos de aritmética bit a bit. Python También se puede intercambiar directamente con el desempaquetado de tuplas.

  • 🔘 Método clásico: El intercambio habitual mantiene un valor en una variable temporal, algo que estas técnicas evitan.
  • Intercambio aritmético: Intercambia valores con a = a + b, luego b = a − b, luego a = a − b.
  • 🔀 Intercambio XOR: Aplica el operador XOR bit a bit tres veces para intercambiar números enteros sin desbordamiento.
  • 🧮 Aritmética bit a bit: Utilice los operadores AND, OR y complemento para reproducir sumas y restas.tracción.
  • 🐍 Python atajo: El desempaquetado de tuplas, a, b = b, a, intercambia dos valores cualesquiera en una línea.
  • 🤖 Inteligencia artificial y datos: El intercambio de tuplas y la indexación NumPy reordenan los elementos de la matriz en la preparación para el aprendizaje automático.

Intercambiar dos Numbers Sin utilizar una tercera variable

Las secciones siguientes cubren cuatro formas de realizar intercambios sin una variable temporal, además del desbordamiento aritmético.

En los lenguajes de programación, intercambiarping significa intercambiar los valores de dos variables. La variable puede contener un número, una cadena, una lista o matriz, un objeto, etc. La forma general de intercambioping es usar una variable temporal para almacenar valores. Por ejemplo,

Intercambiar dos Numbers

Los pasos generales del intercambioping Los dos números son:

  • Declarar una variable temporal C
  • Asigne el valor de A a C, es decir, C = A. Ahora C = 20
  • Asigne el valor de B a A, entonces A = 30
  • Asigne el valor de C a B, entonces B = 20, ya que C tiene el valor 20.

Así es como se hace el intercambioping Esto se realiza con la ayuda de una variable temporal y funciona tanto para números enteros como para números de coma flotante.

Intercambiar usando ecuación aritmética

Como sabemos, intercambioping Intercambiar significa intercambiar el contenido de dos objetos, campos o variables. Intercambiar usando una operación aritmética significa realizar el intercambio usando una ecuación matemática, es decir, suma y resta.tracción.

Si se nos dan dos números y se nos pide que los intercambiemos sin usar una variable temporal, entonces, utilizando tres ecuaciones aritméticas, podemos intercambiar los números.

Pseudocódigo para intercambioping números mediante una operación aritmética:

A = A + B
B = A - B
A = A - B

Supongamos que tenemos dos números, A = 20 y B = 30.

Condición 1: A = A+B

Por lo tanto, el valor actual de A es 20+30 = 50

Condición 2: B = AB

Ahora, B = 50-30 = 20
Podemos ver que obtuvimos el valor de A en B.

Condición 3: A = AB

Finalmente, A = 50-20 = 30
A tiene el valor inicial de B.

Entonces simplemente intercambiamos los números.

Aquí está el programa para intercambiar dos números en 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);
}

Salida:

Enter value of A: 20
Enter value of B: 30
A = 20 , B = 30
Now, A = 30 , B = 20

Programa en 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))

Salida:

Enter value of A: 20
Enter value of B: 30
A = 20 , B = 30
Now, A = 30 , B = 20

Ahora en PythonNi siquiera necesitamos realizar operaciones aritméticas. Podemos usar:

a,b = b,a

Aquí hay una demostración donde a=20, b=30;

Intercambiar usando ecuación aritmética

Intercambio mediante XOR bit a bit Operator

Este método también se conoce como intercambio XOR. XOR significa OR exclusivo. En esta operación bit a bit, se utilizan dos bits como entrada para la operación XOR. Para obtener una única salida de la operación XOR, solo una de las entradas debe ser 1. De lo contrario, la salida será 0. La siguiente tabla muestra la salida para todas las combinaciones de las entradas A y B.

Necesitamos saber cómo funciona la operación XOR para intercambiar dos números mediante operaciones bit a bit. Aquí hay una tabla para XOR donde A y B son los valores de entrada.

A B A X O B
0 0 0
0 1 1
1 0 1
1 1 0

Si dos entradas tienen el mismo valor, la operación XOR da como resultado 0; de lo contrario, da 1. En este ejemplo, utilizaremos una operación XOR de 3. En la mayoría de los lenguajes de programación, XOR se representa con el símbolo “^”.

Supongamos que A=4 (en binario = 0100) y B=7 (en binario, 0111).

Condición 1: A = A^B

A 0 1 0 0
B 0 1 1 1
A^B 0 0 1 1

Ahora, A = 0011 (en binario).

Condición 2: B = A^B

A 0 0 1 1
B 0 1 1 1
A^B 0 1 0 0

Entonces B = 0100, que era el valor binario inicial de A.

Condición 3: A = A^B

A 0 0 1 1
B 0 1 0 0
A^B 0 1 1 1

Finalmente, A = 0111, que era el valor binario equivalente de B.

Programa en 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);
}

Salida:

Enter value of A:4
Enter value of B:7
A=4, B=7
Now, A=7, B=4.

Programa en 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))

Salida:

Enter the value of A:10
Enter the value of B:15
A=10 and B=15
Now, A=15,B=10.

Intercambio Numbers Usando aritmética bit a bit

Este método es el mismo que el método aritmético, pero utilizaremos operaciones bit a bit como AND, OR y complemento para realizar sumas y restas.tracción. Antes de pasar a los pasos, echemos un vistazo rápido a “complemento”.

El complemento a 1 significa cambiar todos los 0 por 1 y los 1 por 0. Veamos un ejemplo.

  • Supongamos que el número es 23, un número decimal.
  • Al convertirlo a binario obtenemos 10111. Solo hay 5 bits, pero la computadora almacena los números en 8, 16, 32, 64… bits. Así que agreguemos un cero delante del binario. Esto no cambiará el valor original del número. Entonces se convertirá en 00010111.
  • Como sabemos, el complemento a 1 significa cambiar todos los 0 a 1 y los 1 a 0, por lo que realizar el complemento a 1 sobre 00010111 da 11101000.

El complemento a uno se representa con el símbolo “~” en la mayoría de los lenguajes de programación. Al anteponer este símbolo a cualquier valor entero o de coma flotante, se obtiene el complemento a uno.

Y el complemento a 2 significa sumar el "1" binario al complemento a 1. Si hacemos complemento a 2 al número anterior:

  • Binario = 00010111
  • Complemento a uno = 11101000
  • Complemento a 2:

11101000

+ 1

11101001

Entonces, el complemento a 2 es 11101001. Este es el binario para -23.
En resumen, para realizar el complemento a 2 de un número A, se verá así:

Complemento a 2 de A = (~A) + 1

Ahora supongamos que A=8 (binario 00001000), B=10 (00001010)

Condición 1: A = (A y B) + (A | B)

Es equivalente a A = A + B.

A y B = 00001000 y 00001010 = 00001000

Un | B = 00001000 | 00001010 = 00001010

Ahora, 00001000 + 00001010 = 00010010 (decimal 18)

Entonces A = 18

Condición 2: B = A + (~B) + 1

Es equivalente a B = AB

Aquí, B = A – B

De la discusión anterior, si necesitamos realizar subtracción, realizamos el complemento a dos del número negativo y luego lo sumamos.

Entonces, -B = ~B + 1

Ahora, B = 00010010 + (11110101) + 1 = 00001000

El valor de B equivale al decimal 8, que era el valor inicial.

Condición 3: A = A + (~B) + 1

Es equivalente a A = AB

Ahora, A = 00010010 + 11110111 + 1

A = 00001010 (equivale al decimal 10)

Finalmente, A obtuvo el valor de B. Por lo tanto, el intercambioping fue completado.

Programa en 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);
}

Salida:

Enter the value of A: 8
Enter the value of B:10
A=8, B=10
Now, A=10, B=8

Programa en 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))

Salida:

Enter the value of A: 25
Enter the value of B: 25
A = 25 and B = 25
Now, A = 25 and B = 25

¿Qué es el desbordamiento aritmético?

El término desbordamiento significa exceder el límite. El desbordamiento aritmético implica que el resultado de cualquier operación aritmética excede el rango o límite de la representación numérica de la arquitectura del ordenador. Por ejemplo, si un número se divide entre cero, se vuelve infinito y el sistema numérico del ordenador no puede almacenarlo en 32 o 64 bits.

Representación de números enteros

Representación de números enteros en un sistema de 32 bits

La consecuencia del desbordamiento aritmético puede ser:

  • La suma de dos números positivos se convierte en negativa, porque el bit de signo podría convertirse en 1, lo que significa un número negativo.
  • La suma de dos números negativos se convierte en un número positivo, porque el bit de signo puede convertirse en 0, lo que significa un número positivo.

Preguntas Frecuentes

Intercambio XORping es el favorito de las entrevistas: sin memoria adicional, sin desbordamiento. La aritmética es una buena alternativa, y Python Los desarrolladores normalmente solo escriben a, b = b, a.

No. La operación XOR bit a bit solo funciona con patrones de bits enteros, no con números de coma flotante, de doble precisión ni punteros. Para números de coma flotante, utilice el desempaquetado de tuplas o el intercambio aritmético.

Si ambas variables comparten una ubicación de memoria, se realiza un intercambio XOR.ping Establece el valor en 0. Agrega una comprobación if siempre que sea posible el alias.

Sí: a = a * b, b = a / b, a = a / b. Pero falla cuando cualquiera de los valores es 0 y pierde precisión de punto flotante.

Solo el desempaquetado de tuplas lo permite. Escribir a, b = b, a intercambia cadenas, listas u objetos. Los trucos aritméticos y XOR solo funcionan con números enteros.

Apenas. Los compiladores modernos ya optimizan los intercambios de variables temporales, por lo que este truco rara vez mejora la velocidad. Readable El código importa más que guardar una sola variable.

Sí. El código de aprendizaje automático intercambia valores con Python desempaquetado de tuplas y NumPy La indexación como arr[[i, j]] = arr[[j, i]] intercambia las filas de la matriz en su lugar.

Sí. GitHub Copilot y asistentes de IA similares generan intercambios XOR, aritméticos y de desempaquetado de tuplas a partir de una solicitud. RevRevisa cada uno en busca de errores de desbordamiento y alias.

Resumir este post con: