Вы заметили странные символы << и >> в коде предыдущей статьи? В Go символы << и >> являются двоичными операторами сдвига или побитовыми операторами.
Оператор << выполняет операцию сдвига влево операнда левой стороны на количество битов, заданное операндом правой стороны. Например, x << y означает, что биты в x сдвигаются влево на y позиций. Это эквивалентно умножению x на 2 в степени y.
Оператор >> выполняет операцию сдвига вправо операнда левой части на количество битов, заданное операндом правой части. Например, x >> y означает, что биты в x сдвигаются вправо на y позиций. Это эквивалентно делению x на 2 в степени y.
В приведенном коде выражение (1 << (n - 1)) сдвигает двоичное представление числа 1 влево на (n - 1) позиций, создавая двоичное число с n цифрами, где самая левая цифра - 1, а остальные цифры - 0. Это эквивалентно умножению 1 на 2 в степени (n - 1).
Выражение ((1 << n) - 1) создает двоичное число с n цифрами, где все цифры равны 1. Это эквивалентно вычитанию 1 из 2