Мне нужна информация о Googles Go. В "A Tour of Go" у них есть этот код:
const (
Big = 1<<100
Small = Big>>99
)
Но что означают <<
и >>
?
Вы можете увидеть весь код в http://tour.golang.org/#14
Мне нужна информация о Googles Go. В "A Tour of Go" у них есть этот код:
const (
Big = 1<<100
Small = Big>>99
)
Но что означают <<
и >>
?
Вы можете увидеть весь код в http://tour.golang.org/#14
Они операторы побитового смены. 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;.
Из спецификации:
Arithmetic operators
...
<< left shift integer << unsigned integer
>> right shift integer >> unsigned integer
и немного ниже:
Операторы сдвига сдвигают левый операнд на счетчик сдвига, указанный правым операндом. Они реализуют арифметические сдвиги, если левый операнд представляет собой целое число со знаком и логические сдвиги, если это целое число без знака. Верхний предел для счета сдвига отсутствует. Сдвиги ведут себя так, как если бы левый операнд смещался n раз на 1 для количества сдвига n. В результате х < 1 совпадает с x * 2 и x → 1 совпадает с x/2, но усекается в сторону отрицательной бесконечности.
Это бит сдвиг влево и бит сдвига вправо. Они такие же, как на языке C и его производных.
x << y
равно x раз 2 до степени y
x >> y
- это x, деленная на 2 на степень y (дробная часть отброшена)
Если вы рассматриваете числа как двоичные, чем умножение на мощность в 2 смены, бит влево (101 * 2 ^ 3 становится 101000) таким же образом, как при десятичном умножении на степеней 10 смены номер на левый (12340 * 10 ^ 3 становится 12340000). Обратное верно для деления по степеням 2. Он сдвигает двоичное представление вправо. Отсюда и название. Это очень быстрая операция для компьютера, который должен выполнять, кстати, поэтому он очень часто используется в приложениях с критическим критически важным битом, например криптографией.
<<
и >>
являются операторами .
Они работают над базовым двоичным представлением числа и "сдвигают" число слева от оператора слева или справа на количество бит, указанное справа от оператора:
1 << 1 == 2
2 << 1 == 4
111b << 3 == 111000b