C# Hakkında Çok Basit Bir Soru ?
-
Destroyer bunu yazdı:
-----------------------------@SharpShooter
a = a ^ b;
b = b ^ a;
a = a ^ b;
Bunda bir hata var sanki ?!?
-----------------------------hayır hocam :)
int a = 5;
int b = 6;
a = a ^ b;
b = b ^ a;
a = a ^ b;
MessageBox.Show(a.ToString()+ "-"+ b.ToString());çıkan sonuç: 6-5
-
@SharpShooter
Hocam mantıklı gelmiyor. Senin C# compiler bozulmuş olmasın. Küçük sayılarla deneyelim. ^ işareti üssü işareti değil mi?
int a = 2;
int b = 3;
a = a ^ b; ---> 2^3 ---> a = 8 oldu.
b = b ^ a; ---> 3^8 ---> b = 6561 oldu.
a = a ^ b; ---> 8^6561 ---> a = 1.4907494374831386027492982111719e+5925 oldu.Hatalıysam söyleyin.
-
üslü olarak almıyor hocam ^ bu...
a=5;
b=6;
a = a ^ b; //5 ^ 6 = 3, yani artık a = 3 oldu
b = b ^ a; //6 ^ 3 = 5 buradan da b= 5 oluyor
a = a ^ b; //3^5=6 buradan da a = 6 oluyor
-
^ hocam bu işaret matematikte veya mantıkta ne olarak kullanılıyor. C# ne anlamda kullanmış anlayamadım. İsmini söyleyebilir misin?
Peki bu işaret 5 ve 6 dışında başka sayılar için de doğru sonuç veriyor mu?
-
Destroyer bunu yazdı:
-----------------------------@SharpShooter
Hocam mantıklı gelmiyor. Senin C# compiler bozulmuş olmasın. Küçük sayılarla deneyelim. ^ işareti üssü işareti değil mi?
int a = 2;
int b = 3;
a = a ^ b; ---> 2^3 ---> a = 8 oldu.
b = b ^ a; ---> 3^8 ---> b = 6561 oldu.
a = a ^ b; ---> 8^6561 ---> a = 1.4907494374831386027492982111719e+5925 oldu.Hatalıysam söyleyin.
-----------------------------benim yöntemin iç yüzü şöyle
int a = 5; ramde şöyle tutuluyor ---> 101
int b = 6; ramde şöyle tutuluyor ---> 110
şimdi
101
110
sağdan başlayarak, 1'i 0 a bölersek kalan 1 olur , 0'ı 1'e bölersek gene kalan 1, 1 bölü 1 dende kalan 0
yani a nın son değeri = 011 yani 3
2. satırda ( b = b ^ a;) ise b nin değeri
101 yani 5,
son durumda
a da = 3
b de = 5 var
en sonda ise
a= 011 -->3
b= 101 -->5
yani, 1 bölü 1 kalan 0, 1 bölü 0 kalan 1 , 0 bölü 1 kalan 1
yani a da en son
a = 110 = 6
not: benim yöntem böyle :)
-
@SharpShooter
ula şimdi anladım. bitwise division'dan bahsediyonuz.
Kanımca bu sadece 5 ve 6 sayıları için çalışır. Dimi? :)
-
hayır hocam hepsi için çalışır bu yöntem..
-
denedim, valla oluyor :D
-
haha harbi manyak yöntemmiş :=)
-
bunun hakkinda bir ara bende yazi yazmistim bir sitede.algoritmanin ismi
"XOR Swap Algorithm" guncel mimarilerde yavas calistigini ogrendigim benimde kullandigim bir algoritmaydi.
http://derlevecalistir.org/ccplusplus/68-genel/72-xor-swap-algoritmasi
Edit : Referanslarda aliasing varsa , veyahut 2 farkli refaransin gosterdigi degerler ayniysa patlayip ikisinede 0 sonucunu veren bir algoritma :) o yuzun
aliasing ve ayni iki sayi olmamasi icin ekstra kosul gerekiyor
