Python Programa para trocar dois números sem usar uma terceira variável.

⚡ Resumo Inteligente

Swapping Dois números sem uma terceira variável trocam seus valores usando adição e subtração aritméticas.tracção, o operador XOR bit a bit, ou truques de aritmética bit a bit. Python Também é possível realizar a troca diretamente com a desempacotagem de tuplas.

  • 🔘 Método clássico: A operação de troca usual armazena um valor em uma variável temporária, algo que essas técnicas evitam.
  • Troca aritmética: Trocar os valores com a = a + b, depois b = a − b, e então a = a − b.
  • 🔀 Troca XOR: Aplique o operador XOR bit a bit três vezes para trocar números inteiros sem estouro de capacidade.
  • 🧮 Aritmética bit a bit: Use os operadores AND, OR e de complemento para reproduzir as operações de adição e subtração.tracção.
  • 🐍 Python atalho: O desempacotamento de tuplas, a, b = b, a, troca quaisquer dois valores em uma única linha.
  • 🤖 Inteligência artificial e dados: Trocas de tuplas e indexação NumPy reordenam elementos de arrays na preparação para aprendizado de máquina.

Trocar dois Numbers Sem usar uma terceira variável

As seções abaixo abordam quatro maneiras de realizar uma troca sem o uso de uma variável temporária, além de tratar o estouro aritmético.

Em linguagens de programação, trocarping Significa trocar os valores de duas variáveis. A variável pode conter um número, string, lista ou array, objeto, etc. A forma geral de troca é...ping É usar uma variável temporária para armazenar valores. Por exemplo,

Trocar dois Numbers

As etapas gerais de trocaping dois números são:

  • Declare uma variável temporária C
  • Atribua o valor de A a C, ou seja, C = A. Agora C = 20
  • Atribua o valor de B a A, então A = 30
  • Atribua o valor de C a B, então B = 20, pois C tem o valor 20.

É assim que se faz uma troca.ping é feito com a ajuda de uma variável temporária e funciona tanto para números inteiros quanto para números de ponto flutuante.

Trocar usando equação aritmética

Como sabemos, trocaping Trocar significa permutar o conteúdo de dois objetos, campos ou variáveis. Trocar usando uma operação aritmética significa realizar a troca usando uma equação matemática, ou seja, adição e subtração.tracção.

Se nos forem dados dois números e for pedido que os troquemos sem usar uma variável temporária, então, usando três equações aritméticas, podemos trocar os números.

Pseudocódigo para trocaping números usando uma operação aritmética:

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

Vamos supor que temos dois números, A = 20 e B = 30.

Condição 1: A = A+B

Portanto, o valor atual de A é 20 + 30 = 50.

Condição 2: B =AB

Agora, B = 50-30 = 20
Podemos ver que obtivemos o valor de A em B.

Condição 3: A =AB

Finalmente, A = 50-20 = 30
A tem o valor inicial de B.

Então, apenas trocamos os números.

Aqui está o programa para trocar dois números em 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);
}

Saída:

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

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

Saída:

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

Agora em Python, nem precisamos realizar operações aritméticas. Podemos usar:

uma,b = b,uma

Aqui está uma demonstração onde a=20, b=30;

Trocar usando equação aritmética

Trocar usando Bitwise XOR Operator

Este método também é conhecido como troca XOR. XOR significa OU exclusivo. Nesta operação bit a bit, usamos dois bits como entradas para o XOR. Para obter uma única saída do XOR, apenas uma das entradas deve ser 1. Caso contrário, a saída será 0. A tabela a seguir mostra a saída para todas as combinações de entradas A e B.

Precisamos entender como a operação XOR funciona para trocar dois números usando a operação bit a bit. Aqui está uma tabela para XOR, onde A e B são os valores de entrada.

A B A X OU B
0 0 0
0 1 1
1 0 1
1 1 0

Se duas entradas tiverem o mesmo valor, a operação XOR resulta em 0; caso contrário, em 1. Neste exemplo, usaremos uma operação XOR tripla. Na maioria das linguagens de programação, o XOR é representado por “^”.

Vamos assumir que A=4 (em binário = 0100) e B=7 (em binário, 0111).

Condição 1: A = A ^ B

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

Agora, A = 0011 (em binário).

Condição 2: B = A^B

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

Então B = 0100, que foi o valor binário inicial de A.

Condição 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 o valor binário equivalente de B.

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

Saída:

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

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

Saída:

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

Swap Numbers usando aritmética bit a bit

Este método é semelhante ao método aritmético, mas utilizaremos operações bit a bit, como AND, OR e complemento, para realizar a adição e a subtração.tracAntes de prosseguirmos com os passos, vamos dar uma olhada rápida em “complemento”.

O complemento de 1 significa trocar todos os 0 por 1 e todos os 1 por 0. Vejamos um exemplo.

  • Vamos supor que o número seja 23, um número decimal.
  • Convertendo para binário, obtemos 10111. Há apenas 5 bits, mas o computador armazena números em 8, 16, 32, 64… bits. Portanto, vamos adicionar um zero à frente do binário. Isso não alterará o valor original do número. Assim, ele se tornará 10111. 00010111.
  • Como sabemos, o complemento de 1 significa trocar todos os 0 por 1 e todos os 1 por 0, portanto, aplicar o complemento de 1 sobre 1 significa trocar todos os 0 por 1 e todos os 1 por 0. 0001011111101000.

O complemento de 1 é representado pelo símbolo “~” na maioria das linguagens de programação. Colocar esse símbolo antes de qualquer valor inteiro ou de ponto flutuante resultará no complemento de 1.

E complemento de 2 significa adicionar “1” binário ao complemento de 1. Se fizermos o complemento de 2 ao número acima:

  • Binário = 00010111
  • Complemento de 1 = 11101000
  • Complemento de dois:

11101000

+ 1

11101001

Portanto, o complemento de 2 é 11101001. Este é o binário para -23.
Em resumo, para realizar o complemento de 2 de um número A, ficará assim:

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

Agora vamos assumir que A=8 (binário 00001000), B=10 (00001010)

Condição 1: UMA = (A e B) + (A | B)

É equivalente a A = A + B.

A e B = 00001000 e 00001010 = 00001000

Um | B = 00001000 | 00001010 = 00001010

Agora, 00001000 + 00001010 = 00010010 (decimal 18)

Então, A = 18

Condição 2: B = A + (~B) + 1

É equivalente a B = AB

Aqui, B = A – B

Com base na discussão acima, se precisarmos realizar sub-rotinastracEm seguida, calculamos o complemento de dois do número negativo e depois o somamos.

Então, -B = ~B + 1

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

O valor de B equivale ao decimal 8, que era o valor inicial.

Condição 3: UMA = UMA + (~B) + 1

É equivalente a A = AB

Agora, A = 00010010 + 11110111 + 1

A = 00001010 (equivalente ao decimal 10)

Finalmente, A obteve o valor de B. Assim, a troca ocorreu.ping Foi completado.

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

Saída:

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

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

Saída:

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

O que é estouro aritmético?

O termo estouro significa ultrapassar o limite. Estouro aritmético significa que o resultado de qualquer operação aritmética excede o intervalo ou limite da representação numérica da arquitetura do computador. Por exemplo, se um número for dividido por zero, ele se torna infinito e o sistema numérico do computador não consegue armazená-lo em 32 ou 64 bits.

Representação de número inteiro

Representação de números inteiros em um sistema de 32 bits

A consequência do estouro aritmético pode ser:

  • A soma de dois números positivos resulta em um número negativo, porque o bit de sinal pode se tornar 1, significando um número negativo.
  • A soma de dois números negativos resulta em um número positivo, porque o bit de sinal pode se tornar 0, o que significa um número positivo.

Perguntas Frequentes

Troca XORping é a opção favorita nas entrevistas: sem necessidade de memória extra, sem estouro de memória. Aritmética é uma alternativa razoável, e Python Os desenvolvedores geralmente escrevem apenas a, b = b, a.

Não. O XOR bit a bit funciona apenas com padrões de bits inteiros, não com números de ponto flutuante, números de dupla precisão ou ponteiros. Para números de ponto flutuante, use a desempacotamento de tuplas ou a troca aritmética.

Se ambas as variáveis ​​compartilharem o mesmo endereço de memória, realize a troca XOR.ping Define o valor como 0. Adicione uma verificação condicional sempre que for possível criar um alias.

Sim: a = a * b, b = a / b, a = a / b. Mas falha quando qualquer um dos valores é 0 e perde a precisão de ponto flutuante.

Somente a desempacotamento de tuplas pode fazer isso. Escrever `a, b = b, a` troca strings, listas ou objetos. Os truques aritméticos e XOR funcionam apenas com números inteiros.

Quase nada. Os compiladores modernos já otimizam a troca de variáveis ​​temporárias, então o truque raramente melhora a velocidade. Readable O código importa mais do que salvar uma única variável.

Sim. O código de aprendizado de máquina troca valores com Python desempacotamento de tuplas e NumPy A indexação como arr[[i, j]] = arr[[j, i]] troca as linhas da matriz no mesmo lugar.

Sim. O GitHub Copilot e assistentes de IA semelhantes geram operações XOR, aritméticas e de desempacotamento de tuplas a partir de um comando. RevInspecione cada um em busca de erros de estouro de buffer e aliasing.

Resuma esta postagem com: