Поразрядные операции

Последнее обновление: 18.12.2017

Поразрядные операции выполняются над отдельными разрядами чисел в бинарном представлении. Например, число пять в двоичной системе имеет три разряда: 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. Поэтому получаем:

101
010
111

В итоге получаем число 111, что в десятичной записи представляет число 7.

Возьмем другое выражение 6 & 2. Число 6 в двоичной записи равно 110, а число 2 - 10 или 010. Умножим соответствующие разряды обоих чисел. Произведение обоих разрядов равно 1, если оба этих разряда равны 1. Иначе произведение равно 0. Поэтому получаем:

110
010
010

Получаем число 010, что в десятичной системе равно 2.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850