Xor Swap Algoritması
-
Bu algoritmanın amacı 2 değişkenin değerlerini geçici değişken kullanmadan değiştirmek.
Basit bi örnek:
#include <iostream> using namespace std; void xorSwap (int *x, int *y) { if (x != y) { *x ^= *y; *y ^= *x; *x ^= *y; } } int main() { int a= 5,b=3; xorSwap(&a,&b); cout<<"a: "<<a<<endl<<"b: "<<b<<endl; return 0; }
Daha fazla bilgi için;
-
Oha yeni gördüm . İlginçmiş. Örneklendirirsek
x=1001
y=1111 ise
x^=y => x=x^y dir... Yani x= 0110
şimdi sıra
y^=x => y=y^x dir... Yani y = 1001
şimdi son olarak x^=y => X= 1111 olur ki algoritmayı uygulamalı denemiş olduk ve çalıştığını görüyorum. Güzelmiş vallaha bunu unutmayayım. Attım kafaya, Beyin bedavah yaaah!!!
DrKill tarafından 24/Ara/12 03:05 tarihinde düzenlenmiştir -
Konuyu baltalamak gibi olmasın da http://en.wikipedia.org/wiki/XOR_linked_list böyle manyak bir şey de var:D
-
kitaptan ilerlerken şöyle bişeye denk geldim : "Write a preprocessor macro that swaps two integers. (If you're a real hacker, write one that does not use a temporary variable declared outside the macro.)" bunu ararken buldum bu algoritmayı, belleğin kısıtlı olduğu durumlarda kullanılırmış.
@yeniharman: adamlar tek pointerda iki bellek adresi tutmuşlar :D o daha fenaymış :D
wasd tarafından 24/Ara/12 03:18 tarihinde düzenlenmiştir -
bunlar hangi matematikten amk ben 4le 4 ü zor topluyorum:(
-
Heh, merak edenler için söyliyim xor şifrelemenin en temel işlemidir. a yı b ile xorlamak, bi anlamda a yı b ile şifrelemek diyebiliriz çünkü sonuca yine b anahtarını uygularsanız a yı elde edersiniz. sayılar ne olursa olsn overflow da olmaz.
Bitwise operatörlerle ilgili bir tane soru sorayım.
Bir sayıyı 8 le nasıl çarparsınız?
-
DrKill bunu yazdı
Oha yeni gördüm . İlginçmiş. Örneklendirirsek
x=1001
y=1111 ise
x^=y => x=x^y dir... Yani x= 0110
şimdi sıra
y^=x => y=y^x dir... Yani y = 1001
şimdi son olarak x^=y => X= 1111 olur ki algoritmayı uygulamalı denemiş olduk ve çalıştığını görüyorum. Güzelmiş vallaha bunu unutmayayım. Attım kafaya, Beyin bedavah yaaah!!!
wayy iyimiş harbiden yukardaki uygulamadan fazla anlamadıgım icin ornekle birdeki yukardakiyle tam oturdu harbi fena :D uzun şifrelere bi kaç hamle deha yaptınmı tmmdir :Dasdasd
-
HolyOne bunu yazdı
Heh, merak edenler için söyliyim xor şifrelemenin en temel işlemidir. a yı b ile xorlamak, bi anlamda a yı b ile şifrelemek diyebiliriz çünkü sonuca yine b anahtarını uygularsanız a yı elde edersiniz. sayılar ne olursa olsn overflow da olmaz.
Bitwise operatörlerle ilgili bir tane soru sorayım.
Bir sayıyı 8 le nasıl çarparsınız?
3 defa sola öteleyerek mi ?
-
HolyOne bunu yazdı
Heh, merak edenler için söyliyim xor şifrelemenin en temel işlemidir. a yı b ile xorlamak, bi anlamda a yı b ile şifrelemek diyebiliriz çünkü sonuca yine b anahtarını uygularsanız a yı elde edersiniz. sayılar ne olursa olsn overflow da olmaz.
Bitwise operatörlerle ilgili bir tane soru sorayım.
Bir sayıyı 8 le nasıl çarparsınız?
2lik tabandaki değerini 3bit sola kaydırarak (benden önce yazılmış :F)
sayi<<3 şeklindeydi sanırım
wasd tarafından 17/Oca/13 03:12 tarihinde düzenlenmiştir -
Ben de mantığı açıklayayım bari:)
Onluk sistemi düşünelim önce. Sayımız 12345 olsun, bu sayıyı on ile çarpmak istesek en sağına bir sıfır koyuyoruz. Makinecesi bir kere sola kaydırıyoruz. Matematiksel temel
12345 = (5 * 10 ^ 0) + (4 * 10 ^ 1) + (3 * 10 ^ 2) + (2 * 10 ^ 3) + (1 * 40 ^ 4)
sayıyı 10 ile çarpalım:
123450 = (5 * 10 ^ (0 + 1) ) + (4 * 10 ^ (1 + 1) ) + (3 * 10 ^ (2 + 1) ) + (2 * 10 ^ (3 + 1) ) + (1 * 40 ^ (4 + 1) )
Daha açık ifadeyle 10'nun kuvvetini 1 arttırıyoruz. Burada dikkat etmemiz gereken nokta 10'un kuvvetinin bir arttığı. En önemlisi ise onluk taban ve çarpacağımız sayının (10) eşit olduğu. Eğer 100 (10^2) ile çarpmak istesek 10'un kuvvetleri 2, 1000 (10^3) ile ise 3 ,... , 10...0 (10 ^ n) ile ise n kadar arttıracaktık.
Şimdi ikilik tabanda bir sayı yazalım ve bu sefer iki ile çarpalım:
101(2) = (1 * 2 ^ 0) + (0 * 2 ^ 1) + ( 1 * 2 ^ 2).
101(2) x 2 = 1010(2)
1010(2) = (1 * 2 ^ (0+1)) + (0 * 2 ^ (1+1)) + ( 1 * 2 ^ (2+1)).
Bu sefer çarpacağımız sayı 2 ve tabanımız 2. Onluk tabandaki işlemler burada da geçerli. 4 ( 2^2) ile çarpmak istesek 2'nin kuvvetlerini 2 ile, 8 (2^3) ile çarpmak istesek 3 ile çarpacağız. Yani sayıyı sola doğru 1 bit kaydırıp boşlukları 0 ile dolduracağız. Bu durum bölme işleminde de geçerlidir. Yalnız bu şekilde bölme yapıyorsak kullandığımız veritipi önemli:)
-
Python ile,
a, b = b, a