XOR交換

xor swapの話.
教えていただいてやっと理解できた.

a = 5; b = 6
a ^= b; b ^= a; a ^= b
puts a #=> 6
puts b #=> 5

これで値の入れ替えが出来る.不思議.
 
仕組み的にはこうなってるんだな.

a = x = 0b01010; b = y = 0b10101
a ^= b # a = (x ^ y) = 11111
b ^= a # b = x ^ (x ^ y) = 10101 ^ 11111 = 01010
a ^= b # a = (x ^ y) ^ y = 11111 ^ 01010 = 10101
puts a.to_s(2) #=> 10101
puts b.to_s(2) #=> 01010

アルゴリズム本と言えば奥村さんのあの貝殻のやつが..

C言語による最新アルゴリズム事典 (ソフトウェアテクノロジー)

C言語による最新アルゴリズム事典 (ソフトウェアテクノロジー)

最近はkisさんとかkiwanamiさんが読書会されている本が良さそう.
アルゴリズムデザイン

アルゴリズムデザイン