Счетчик констант и сдвиг в Go
Счетчик констант вместе со сдвигом дает
степени двойки без ручных чисел. На первой
строке блока пишут 1 << iota, а
следующие имена без правой части повторяют
то же выражение, но iota растет
на каждой строке.
Так получают набор флагов, где каждое имя отвечает своему разряду. Подробнее про счетчик констант вы уже читали в соседнем разделе, здесь важна именно связка со сдвигом.
Объявим три константы и выведем значения:
const (
A = 1 << iota
B
C
)
fmt.Println(A, B, C)
На экране 1, 2 и 4.
У A счетчик 0, сдвиг дает
1. У B счетчик уже 1,
сдвиг на один разряд дает 2. У
C счетчик 2, итог 4.
Тот же прием с большим сдвигом на первой строке задает другую шкалу:
const (
Low = 1 << iota
Mid
High
)
fmt.Printf("%b %b %b\n", Low, Mid, High)
Дан следующий код:
const (
P = 1 << iota
Q
R
)
Запишите значения P, Q
и R.
Даны имена Bit0, Bit1,
Bit2. Составьте блок констант
со значениями 1, 2, 4
через счетчик и сдвиг и выведите Bit1.
Дан следующий код:
const (
X = 1 << iota
Y
)
const (
Z = 1 << iota
W
)
Сравните Y и W: равны ли они.