Intercambiar dos números sin utilizar una tercera variable: C, Python Programa
En programación, el intercambio de lenguaje significa intercambiar el valor de dos variables. La variable puede contener un número, cadena, lista o matriz, objeto, etc. La forma general de intercambio es utilizar una variable temporal para contener valores. Por ejemplo,
Los pasos generales para intercambiar dos números son:
- Declarada 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.
Se trata de la forma en que se realiza el intercambio con la ayuda de una variable temporal. Este método funcionará tanto para números enteros como para números de coma flotante.
Intercambiar usando ecuación aritmética
Como sabemos, intercambiar significa intercambiar el contenido de dos objetos, campos o variables. Intercambiar mediante operaciones aritméticas significa realizar la operación de intercambio mediante la ecuación matemática, es decir, la suma y la resta.
Si nos dan dos números y nos piden que los intercambiemos sin utilizar una variable temporal, entonces, usando tres ecuaciones aritméticas, podemos intercambiar los números.
Pseudocódigo para intercambiar números mediante operaciones aritméticas:
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
Entonces, 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 Python, ni siquiera necesitamos realizar operaciones aritméticas. Podemos utilizar:
a,b = b,a
Aquí hay una demostración donde a=20, b=30;
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, tomamos dos bits como entradas para el XOR. Para obtener una salida de XOR, solo una entrada debe ser 1. De lo contrario, la salida será 0. La siguiente tabla muestra la salida para todas las combinaciones de entrada A B.
Necesitamos saber cómo funciona la operación XOR para intercambiar dos números mediante la operación bit a bit. Aquí hay una tabla para XOR donde A y B son 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, 1. Para este ejemplo, utilizaremos una operación XOR 3. En la mayoría de los lenguajes de programación, XOR se denota como “^”.
Supongamos 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. Antes de pasar a los pasos, veamos rápidamente "Complemento".
El complemento a 1 significa cambiar todos los 0 a 1 y 1 a 0. Pongamos un ejemplo.
- Supongamos un número 23, un número decimal.
- La conversión a binario da uso 10111. Solo hay 5 bits, pero la computadora almacena el número en 8,16,32,64... bits. Entonces agreguemos cero delante del binario. No cambiará el valor original del número. Entonces se convertirá 00010111.
- Como sabemos, el complemento a 1 significa cambiar todos los 0 a 1 y 1 a 0, por lo que realizar el complemento a 1 sobre 00010111 da 11101000
El complemento a 1 se representa con “~”, este símbolo en la mayoría de los lenguajes de programación. Poner este símbolo antes de cualquier valor entero o valor de punto flotante dará el complemento a 1.
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
- Elogio de 1 = 11101000
- Elogio de 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 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
Su equivalente a B = A-B
Aquí, B = A – B
De la discusión anterior, si necesitamos realizar una resta, realizamos el complemento a 2 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
Su equivalente a A = A-B
Ahora, A = 00010010 + 11110111 + 1
A = 00001010 (equivale al decimal 10)
Finalmente, A obtuvo el valor de B. Así, se completó el intercambio.
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 significa que el resultado de cualquier operación aritmética excede el rango o límite de la representación numérica de la arquitectura informática. Por ejemplo, si un número se divide por cero, se vuelve infinito y el sistema numérico de la computadora no puede almacenarlo en 32 o 64 bits.
La consecuencia del desbordamiento aritmético puede ser:
- La suma de dos números positivos se convierte en negativa, ya que el bit de signo puede convertirse en 1, es decir, un número negativo.
- La suma de dos números negativos se convierte en positiva, ya que el bit de signo puede convertirse en 0, es decir, un número positivo.