Что означает >> в языке Go?

Мне нужна информация о Googles Go. В "A Tour of Go" у них есть этот код:

const (
    Big = 1<<100
    Small = Big>>99
)

Но что означают << и >>?

Вы можете увидеть весь код в http://tour.golang.org/#14

Ответ 1

Они операторы побитового смены. x << y означает x & times; 2 y а x >> y означает x & times; 2 & minus; y или, что эквивалентно, x & divide; 2 y. Эти операторы обычно используются для управления двоичным представлением значения, где, как и с силой 10 в десятичной системе, умножение или деление на две силы приводит к "сдвигу" цифр влево или вправо соответственно:

// Left shift:

  13 *  2 ==    26 // decimal
1101 * 10 == 11010 // binary (13 is 8 + 4 + 0 + 1)

// Right shift (brackets denote discarded portion):

  13 /  2 ==   6[.5] // decimal
1101 / 10 == 110[.1] // binary

Поскольку вы работаете с целыми числами, а сдвиг вправо обычно приводит к дробным значениям, существует несколько способов обработки того, как округляется результат правого сдвига. В Go правый сдвиг - это логический сдвиг на значения без знака и арифметический сдвиг о подписанных значениях. Логический сдвиг всегда округляется до нуля, а арифметический сдвиг всегда округляется, т.е. К & минус; & infin;.

Ответ 2

Из спецификации:

Arithmetic operators

...

<<   left shift             integer << unsigned integer
>>   right shift            integer >> unsigned integer

и немного ниже:

Операторы сдвига сдвигают левый операнд на счетчик сдвига, указанный правым операндом. Они реализуют арифметические сдвиги, если левый операнд представляет собой целое число со знаком и логические сдвиги, если это целое число без знака. Верхний предел для счета сдвига отсутствует. Сдвиги ведут себя так, как если бы левый операнд смещался n раз на 1 для количества сдвига n. В результате х < 1 совпадает с x * 2 и x → 1 совпадает с x/2, но усекается в сторону отрицательной бесконечности.

Ответ 3

Это бит сдвиг влево и бит сдвига вправо. Они такие же, как на языке C и его производных.

x << y 

равно x раз 2 до степени y

x >> y

- это x, деленная на 2 на степень y (дробная часть отброшена)

Если вы рассматриваете числа как двоичные, чем умножение на мощность в 2 смены, бит влево (101 * 2 ^ 3 становится 101000) таким же образом, как при десятичном умножении на степеней 10 смены номер на левый (12340 * 10 ^ 3 становится 12340000). Обратное верно для деления по степеням 2. Он сдвигает двоичное представление вправо. Отсюда и название. Это очень быстрая операция для компьютера, который должен выполнять, кстати, поэтому он очень часто используется в приложениях с критическим критически важным битом, например криптографией.

Ответ 4

<< и >> являются операторами .

Они работают над базовым двоичным представлением числа и "сдвигают" число слева от оператора слева или справа на количество бит, указанное справа от оператора:

1 << 1 == 2
2 << 1 == 4
111b << 3 == 111000b