Ответ 1
Здесь функция для установки бит. Во-первых, сдвиньте число 1 заданное количество пробелов в целое число (таким образом, оно станет 0010, 0100 и т.д.). Затем OR с исходным входом. Это оставляет другие биты незатронутыми, но всегда будет устанавливать целевой бит в 1.
// Sets the bit at pos in the integer n.
func setBit(n int, pos uint) int {
n |= (1 << pos)
return n
}
Здесь функция, чтобы очистить бит. Сначала сдвиньте число 1 заданное количество пробелов в целое число (так что оно станет 0010, 0100 и т.д.). Затем переверните каждый бит в маске с помощью оператора ^
(поэтому 0010 станет 1101). Затем используйте побитовое И, которое не касается чисел AND
'ed с 1, но которое отключит значение в маске, которое установлено на 0.
// Clears the bit at pos in n.
func clearBit(n int, pos uint) int {
mask := ^(1 << pos)
n &= mask
return n
}
Наконец, здесь функция, чтобы проверить, установлен ли бит. Сдвиньте число 1 на указанное количество пробелов (так оно станет 0010, 0100 и т.д.), А затем И с целевым номером. Если итоговое число больше 0 (это будет 1, 2, 4, 8 и т.д.), Тогда бит будет установлен.
func hasBit(n int, pos uint) bool {
val := n & (1 << pos)
return (val > 0)
}