C # Operador Shift Esquerdo

Há uma declaração que um colega meu escreveu e que eu não entendo completamente. Infelizmente ele não está disponível no momento, então aqui está (com nomes modificados, estamos trabalhando em um jogo no Unity).

private readonly int FRUIT_LAYERS =
          (1 << LayerMask.NameToLayer("Apple"))
        | (1 << LayerMask.NameToLayer("Banana"));

NameToLayer pega uma string e retorna um inteiro. Eu sempre vi operadores de turno esquerdo usados ​​com o inteiro constante no lado direito, não o esquerdo, e todos os exemplos que eu estou encontrando via Google seguem essa abordagem. Neste caso, acho que ele está empurrando Apple e Banana para a mesma camada relativa (que eu vou usar mais tarde para filtrar). No futuro, haveria mais "frutos" para filtrar. Qualquer stackoverflower brilhante que pode me dar uma explicação do que está acontecendo nessas linhas?

questionAnswers(4)

yourAnswerToTheQuestion