Python Üçüncü bir değişken kullanmadan iki sayıyı değiştiren program.

⚡ Akıllı Özet

takasping Üçüncü bir değişken olmaksızın iki sayı, aritmetik toplama ve çıkarma işlemleri kullanılarak değerlerini yerinde değiştirir.tracBit tabanlı XOR operatörü veya bit tabanlı aritmetik hileler. Python Ayrıca, demet açma işlemiyle doğrudan da değiştirilebilir.

  • 🔘 Klasik yöntem: Normalde yapılan takas işlemi, geçici bir değişkende tek bir değer tutar; bu teknikler ise bundan kaçınır.
  • Aritmetik takas: Önce a = a + b, sonra b = a − b, sonra da a = a − b değerlerini değiştirin.
  • 🔀 XOR değişimi: Taşma olmadan tamsayıları değiştirmek için bit düzeyinde XOR operatörünü üç kez uygulayın.
  • 🧮 Bit tabanlı aritmetik: Toplama ve çıkarma işlemlerini tekrarlamak için VE, VEYA ve tamamlayıcı operatörlerini kullanın.tracyon.
  • 🐍 Python kısayol: Tuple açma işlemi, a, b = b, a, herhangi iki değeri tek satırda değiştirir.
  • 🤖 Yapay zeka ve veri: Makine öğrenimi hazırlığında demet takasları ve NumPy indeksleme, dizi elemanlarının sıralamasını yeniden düzenler.

İkiyi Değiştir Numbers Üçüncü bir değişken kullanmadan

Aşağıdaki bölümlerde geçici değişken kullanmadan takas yapmanın dört yolu ve aritmetik taşma sorunu ele alınmaktadır.

Programlama dillerinde, takasping İki değişkenin değerlerini değiştirmek anlamına gelir. Değişken bir sayı, dize, liste veya dizi, nesne vb. içerebilir. Değiştirmenin genel yolu şöyledir:ping Geçici bir değişken kullanarak değerleri saklamak mümkündür. Örneğin,

İkiyi Değiştir Numbers

Takasın genel adımlarıping İki sayı şöyledir:

  • Geçici bir değişken C tanımlayın.
  • A'nın değerini C'ye atayın, yani C = A. Şimdi C = 20
  • B'nin değerini A'ya atayın, yani A = 30
  • C'nin değerini B'ye atayın, yani B = 20, çünkü C'nin değeri 20'dir.

Takas işlemi işte böyle yapılır.ping Bu işlem geçici bir değişken yardımıyla yapılır ve hem tamsayılar hem de ondalık sayılar için geçerlidir.

Aritmetik Denklemi Kullanarak Değiştirme

Bildiğimiz gibi, takasping İki nesnenin, alanın veya değişkenin içeriğini değiştirmek anlamına gelir. Aritmetik işlem kullanarak değiştirme, matematiksel bir denklem kullanarak, yani toplama ve çıkarma yoluyla değiştirme işlemini gerçekleştirmek demektir.tracyon.

Bize iki sayı verilip, geçici bir değişken kullanmadan yer değiştirmemiz isteniyorsa, üç aritmetik denklem kullanarak sayıları değiştirebiliriz.

takas için sözde kodping Aritmetik işlem kullanarak sayılar:

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

A = 20 ve B = 30 olmak üzere iki sayımız olduğunu varsayalım.

Durum 1: bir = A+B

Dolayısıyla, A'nın mevcut değeri 20+30 = 50'dir.

Durum 2: B = AB

Şimdi B = 50-30 = 20
A'nın değerini B'de bulduğumuzu görebiliyoruz.

Durum 3: bir = AB

Son olarak A = 50-20 = 30
A, B'nin başlangıç ​​değerine sahiptir.

Yani sayıları değiştirdik.

İşte C dilinde iki sayıyı yer değiştiren program.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);
}

Çıktı:

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

Programda 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))

Çıktı:

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

Şimdi PythonHatta aritmetik işlemler yapmamıza bile gerek yok. Şunları kullanabiliriz:

a,b = b,a

Burada a=20, b=30 değerlerinin kullanıldığı bir örnek gösterilmiştir;

Aritmetik Denklemi Kullanarak Değiştirme

Bitwise XOR kullanarak takas yapın Operator

Bu yöntem aynı zamanda XOR takası olarak da bilinir. XOR, özel VEYA anlamına gelir. Bu bit tabanlı işlemde XOR'a giriş olarak iki bit alırız. XOR'dan bir çıktı almak için, girişlerden yalnızca birinin 1 olması gerekir. Aksi takdirde, çıktı 0 olur. Aşağıdaki tablo, A ve B girişlerinin tüm kombinasyonları için çıktıyı göstermektedir.

İki sayıyı bit düzeyinde işlem kullanarak değiştirmek için XOR işleminin nasıl çalıştığını bilmemiz gerekiyor. Burada A ve B'nin giriş değerleri olduğu bir XOR tablosu bulunmaktadır.

A B A XOR B
0 0 0
0 1 1
1 0 1
1 1 0

İki giriş aynı değere sahipse, XOR işlemi 0 verir; aksi takdirde 1 verir. Bu örnekte, 3'lü XOR işlemi kullanacağız. Çoğu programlama dilinde XOR, "^" ile gösterilir.

A=4 (ikili sistemde = 0100) ve B=7 (ikili sistemde, 0111) olduğunu varsayalım.

Durum 1: bir = bir ^ B

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

Şimdi, A = 0011 (İkili olarak).

Durum 2: B = A^B

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

Yani B = 0100, bu A'nın ilk ikili değeriydi.

Durum 3: bir = A^B

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

Son olarak, B'nin eşdeğer ikili değeri olan A = 0111.

C/'deki programC++:

#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);
}

Çıktı:

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

Programda 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))

Çıktı:

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

takas Numbers Bitwise-Aritmetik kullanarak

Bu yöntem aritmetik yöntemle aynıdır, ancak toplama ve çıkarma işlemlerini gerçekleştirmek için VE, VEYA ve tamamlayıcı gibi bit düzeyinde işlemler kullanacağız.tracAdımlara geçmeden önce, "tamamlayıcı" kavramına kısaca bir göz atalım.

Birler tamamlayıcısı, tüm 0'ları 1'e ve tüm 1'leri 0'a çevirmek anlamına gelir. Bir örnek verelim.

  • Örneğin, ondalık bir sayı olan 23 sayısını ele alalım.
  • İkili sayıya dönüştürdüğümüzde 10111 elde ederiz. Sadece 5 bit var, ancak bilgisayar sayıları 8, 16, 32, 64… bit olarak saklar. Bu yüzden ikili sayının önüne sıfır ekleyelim. Bu, sayının orijinal değerini değiştirmeyecektir. Dolayısıyla, sayı şu hale gelecektir: 00010111.
  • Bildiğimiz gibi, 1'in tümleyeni, tüm 0'ları 1'e ve 1'leri 0'a çevirmek anlamına gelir; bu nedenle, 1'in tümleyenini şu şekilde uygulamak: 00010111 verir 11101000.

Bu birler tümleyeni, çoğu programlama dilinde "~" sembolüyle gösterilir. Bu sembolü herhangi bir tamsayı değerinin veya ondalık sayı değerinin önüne koymak, birler tümleyenini verir.

2'nin tümleyeni ise 1'in tümleyenine ikili “1”in eklenmesi anlamına gelir. Yukarıdaki sayının 2'ye tümleyenini yaparsak:

  • İkili = 00010111
  • 1'in tümleyeni = 11101000
  • 2'nin tümleyeni:

11101000

+ 1

11101001

Yani 2'nin tümleyeni 11101001'dir. Bu -23'ün İkilisidir.
Özetle, bir A sayısının 2'ye tümleyenini gerçekleştirmek için şöyle görünecektir:

A'nın 2'ye tümleyeni = (~A) + 1

Şimdi A=8 (ikili 00001000), B=10 (00001010) olduğunu varsayalım.

Durum 1: bir = (A ve B) + (A | B)

Bu, A = A + B ifadesine eşdeğerdir.

A ve B = 00001000 ve 00001010 = 00001000

bir | B = 00001000 | 00001010 = 00001010

Şimdi, 00001000 + 00001010 = 00010010 (ondalık 18)

Yani A = 18

Durum 2: B = Bir + (~B) + 1

Bu, B = AB'ye eşdeğerdir.

Burada B = A – B

Yukarıdaki tartışmadan yola çıkarak, alt işlemleri gerçekleştirmemiz gerekiyorsatracBu durumda, negatif sayıya 2'nin tümleyeni işlemini uygularız ve ardından onu ekleriz.

Yani, -B = ~B + 1

Şimdi, B = 00010010 + (11110101) + 1 = 00001000

B'nin değeri başlangıç ​​değeri olan ondalık 8'e eşdeğerdir.

Durum 3: bir = Bir + (~B) + 1

Bu, A = AB eşitliğine eşdeğerdir.

Şimdi, A = 00010010 + 11110111 + 1

A = 00001010 (ondalık sayı 10'a eşdeğer)

Sonunda A, B'nin değerini aldı. Böylece takas gerçekleşti.ping tamamlanmıştı.

C/'deki programC++:

#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);
}

Çıktı:

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

Programda 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))

Çıktı:

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

Aritmetik Taşma Nedir?

"Taşma" terimi, sınırı aşmak anlamına gelir. Aritmetik taşma, herhangi bir aritmetik işlemin sonucunun, bilgisayar mimarisinin sayı gösteriminin aralığını veya sınırını aşması anlamına gelir. Örneğin, bir sayı sıfıra bölündüğünde sonsuz olur ve bilgisayar sayı sistemi bunu 32 veya 64 bit içinde tutamaz.

Tam sayı gösterimi

32 bitlik bir sistemde tam sayı gösterimi

Aritmetik taşmanın sonucu şunlar olabilir:

  • İki pozitif sayının toplamı negatif olur, çünkü işaret biti 1 olabilir, yani negatif bir sayı elde edilir.
  • İki negatif sayının toplamı pozitif olur, çünkü işaret biti 0 olabilir, yani pozitif bir sayı elde edilir.

SSS

XOR değişimiping Görüşmelerde en çok tercih edilen seçenek: fazladan bellek yok, taşma yok. Aritmetik işlemler de iyi bir yedekleme seçeneği. Python Geliştiriciler genellikle sadece a, b = b, a yazarlar.

Hayır. Bit tabanlı XOR yalnızca tamsayı bit desenlerinde çalışır, kayan noktalı sayılar, çift duyarlıklı sayılar veya işaretçilerde çalışmaz. Kayan noktalı sayılar için bunun yerine demet açma veya aritmetik takas kullanın.

Eğer her iki değişken de aynı bellek konumunu paylaşıyorsa, XOR işlemiyle yer değiştirme işlemi yapılır.ping Değeri 0'a ayarlar. Takma adlandırma olasılığı olan her durumda bir if kontrolü ekleyin.

Evet: a = a * b, b = a / b, a = a / b. Ancak değerlerden herhangi biri 0 olduğunda hata verir ve ondalık sayı hassasiyetini kaybeder.

Yalnızca demet açma işlemi bunu yapabilir. a, b = b, a yazmak dizeleri, listeleri veya nesneleri değiştirir. Aritmetik ve XOR işlemleri yalnızca tamsayılar için geçerlidir.

Pek sayılmaz. Modern derleyiciler zaten geçici değişken takaslarını optimize ediyor, bu nedenle bu yöntem nadiren hızı artırıyor. Readable Kodun önemi, tek bir değişkeni kaydetmekten daha fazladır.

Evet. Makine öğrenimi kodu değerleri değiştirir. Python demet açma ve Dizi arr[[i, j]] = arr[[j, i]] gibi indeksleme, dizi satırlarını yerinde değiştirir.

Evet. GitHub Copilot ve benzeri yapay zeka asistanları, komut isteminden XOR, aritmetik ve demet açma işlemleri üretebiliyor. RevTaşma ve takma adlandırma hataları için her birini inceleyin.

Bu yazıyı şu şekilde özetleyin: