Поразрядные операции выполняются над отдельными разрядами чисел в бинарном представлении. Например, число пять в двоичной системе имеет три разряда: 101, а число восемь - четыре разряда: 1000.
И операции сдвига позволяют сдвинуть двоичное представление числа на несколько разрядов вправо или влево. Операции сдвига применяются только к целочисленным операндам. Есть две операции:
<<
Сдвигает битовое представление числа, представленного первым операндом, влево на определенное количество разрядов, которое задается вторым операндом.
>>
Сдвигает битовое представление числа вправо на определенное количество разрядов.
Применение операций:
var b int = 2 << 2; // 10 на два разрядов влево = 1000 - 8 var c int = 16 >> 3; // 10000 на три разряда вправо = 100 - 2
Число 2 в двоичном представлении 10. Если сдвинуть число 10 на два разряда влево, то получится 1000, что в десятичной системе равно число 8.
Число 16 в двоичном представлении 10000. Если сдвинуть число 10000 на три разряда вправо (три последних разряда отбрасываются), то получится 10, что в десятичной системе представляет число 2.
Поразрядные операции также проводятся только над разрядами целочисленных операндов:
&: поразрядная конъюнкция (операция И или поразрядное умножение). Возвращает 1, если оба из соответствующих разрядов обоих чисел равны 1. Возвращает 0, если разряд хотя бы одного числа равен 0
|: поразрядная дизъюнкция (операция ИЛИ или поразрядное сложение). Возвращает 1, если хотя бы один из соответствующих разрядов обоих чисел равен 1
^: поразрядное исключающее ИЛИ. Возвращает 1, если только один из соответствующих разрядов обоих чисел равен 1
&^: сброс бита (И НЕ). В выражении z = x &^ y
каждый бит z равен 0, если соответствующий бит y равен 1. Если бит в y равен 0, то берется значение соответствующего бита из x.
Применение операций:
package main import "fmt" func main() { var a int = 5 | 2; // 101 | 010 = 111 - 7 var b int = 6 & 2; // 110 & 010 = 10 - 2 var c int = 5 ^ 2; // 101 ^ 010 = 111 - 7 var d int = 5 &^ 6; // 101 &^ 110 = 001 - 1 }
Например, выражение 5 | 2
равно 7. Число 5 в двоичной записи равно 101, а число 2 - 10 или 010. Сложим соответствующие разряды обоих чисел. При сложении если хотя бы
один разряд равен 1, то сумма обоих разрядов равна 1. Поэтому получаем:
1 | 0 | 1 |
0 | 1 | 0 |
1 | 1 | 1 |
В итоге получаем число 111, что в десятичной записи представляет число 7.
Возьмем другое выражение 6 & 2
. Число 6 в двоичной записи равно 110, а число 2 - 10 или 010. Умножим соответствующие разряды
обоих чисел. Произведение обоих разрядов равно 1, если оба этих разряда равны 1. Иначе произведение равно 0. Поэтому получаем:
1 | 1 | 0 |
0 | 1 | 0 |
0 | 1 | 0 |
Получаем число 010, что в десятичной системе равно 2.