(1 << (x - 'a')) bestimmt die Position des Buchstabens im Alphabet und shiftet die Zahl 1 um ebendiese Position nach links. Also Buchstabe "a" wird zu der Binärzahl 1b, "c" zu 100b, "e" zu 10000b.
Wenn du also "ABD" eingibst, bekommst du die Werte:
A: 0001b
B: 0010b
D: 1000b
Die musst du jetzt nurnoch übereinanderlegen. Das geschieht mit dem "res = res | ...". Die Werte werden per Bitwise-OR verrechnet. Das bedeutet im Endeffekt, dass eine Art "Summe" gebildet wird.
Im obigen Beispiel also: 0001b | 0010b | 1000b = 1011b
Es werden also alle Bits auf 1 gesetzt, bei denen mind. eines der Elemente eine 1 hat.
Wenn du also "ABD" eingibst, bekommst du die Werte:
A: 0001b
B: 0010b
D: 1000b
Die musst du jetzt nurnoch übereinanderlegen. Das geschieht mit dem "res = res | ...". Die Werte werden per Bitwise-OR verrechnet. Das bedeutet im Endeffekt, dass eine Art "Summe" gebildet wird.
Im obigen Beispiel also: 0001b | 0010b | 1000b = 1011b
Es werden also alle Bits auf 1 gesetzt, bei denen mind. eines der Elemente eine 1 hat.