Найти тему

059 Двоичные операторы сдвига

Вы заметили странные символы << и >> в коде предыдущей статьи?

В 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 в степени n и обычно используется для создания битовых масок.

Наконец, все выражение ((1 << (n - 1)) * ((1 << n) - 1)) вычисляет произведение этих двух двоичных чисел, в результате чего получается двоичное число с 2n - 1 цифрами. Используется в контексте поиска совершенных чисел, темы в теории чисел.

Простой пример:

Go Playground - The Go Programming Language

В этом примере мы начинаем с двоичного представления числа 10, которое в двоичном виде равно 0b1010. Затем, мы выполняем сдвиг этого числа влево на 2 бита с помощью оператора <<, который сдвигает биты влево на 2 позиции, эффективно умножая число на 2 в степени 2 //10*2^2. Полученное значение является двоичным представлением десятичного числа 40 или в бинарном виде 101000.

Затем мы выполняем сдвиг этого числа вправо на 3 бита с помощью оператора >>, который сдвигает биты вправо на 3 позиции, эффективно деля число на 2 в степени 3. //40/2^3 Полученное значение в бинарном виде равно числу 000101, а в десятичном представлении числу 5.

Наука
7 млн интересуются