Что значит >> на языке Go? - PullRequest
13 голосов
/ 21 марта 2012

Я ищу информацию о языке Google Go. В «Тур по Го» они имеют следующий код:

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

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

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

Ответы [ 4 ]

26 голосов
/ 21 марта 2012

Это битовые операторы сдвига .x << y означает x × 2 y , а x >> y означает x × 2 −y или, что эквивалентно, x ÷ 2 y .Эти операторы обычно используются для манипулирования двоичным представлением значения, где, подобно десятичной степени 10, умножение или деление на степень 2 приводит к «сдвигу» цифр влево или вправо соответственно:

// 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 правый сдвиг представляет собой логический сдвиг для значений без знака и арифметический сдвиг для значений со знаком.Логический сдвиг всегда округляется к нулю, а арифметический сдвиг всегда округляется вниз, то есть к −∞.

7 голосов
/ 21 марта 2012

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

Arithmetic operators

...

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

и чуть ниже:

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

4 голосов
/ 21 марта 2012

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

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

1 << 1 == 2
2 << 1 == 4
111b << 3 == 111000b
4 голосов
/ 21 марта 2012

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

x << y 

в х раз 2 к степени у

x >> y

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

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

...