caracteres únicos con cambio y operadores: no entiendo este código

No entiendo las líneas en el bucle: tomamos el carácter y restamosa, entonces "10"? (¿por qué?)
entonces1 << val : cambiamos 1 por val? (¿por qué?)
y el marcador es 0, entonces, ¿cómo llegamos a> 0 en la condicion?

    public static boolean isUniqueChars(String str) {
    int checker = 0;
    for (int i = 0; i < str.length(); i++) {
        int val = str.charAt(i) - 'a';
        if ((checker & (1 << val)) > 0) return false;
        checker |= (1 << val);
    }
    return true;
}

Gracias

Respuestas a la pregunta(3)

Su respuesta a la pregunta