Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goSpBtIv 72 of 280 menu
◀ ▶

Инверсия и сброс битов в Go

Инверсия переворачивает каждый бит, а сброс гасит только биты, отмеченные маской. В Go нет отдельного знака тильды, как в некоторых языках: все разряды меняют, записав ^ перед одним числом.

Сброс делают через &^: это И-НЕ, оно обнуляет те разряды, где в маске единица, а остальные копирует из исходного числа.

Инвертируем число и посмотрим двоичный вид:

x := 5 inv := ^x fmt.Println(inv) fmt.Printf("%b %b\n", x, inv)

Для беззнакового типа результат зависит от ширины типа. В примере с int на 64-разрядной платформе инверсия 5 дает большое отрицательное число, потому что старший разряд становится единицей.

Сбросим младшие два разряда маской 3:

flags := 15 mask := 3 cleared := flags &^ mask fmt.Println(cleared) fmt.Printf("%b %b\n", flags, cleared)

Даны числа:

v := 8

Инвертируйте все разряды v и запишите результат для типа uint8 (8 бит).

Даны числа:

n := 13 m := 4

Сбросьте биты n там, где в m единица, и запишите результат.

Дан следующий код:

a := 7 b := ^a

Скажите, сколько операндов у знака перед a в строке с b.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить