Я действительно не могу погуглить имя И НЕ и получить какие-либо полезные результаты, что именно представляет собой этот оператор и как я могу сделать это на таком языке, как C? Я проверил спецификацию, и там нет ничего полезного, кроме списка, в котором написано, что это &^ (И НЕ).

19
mosmo 25 Дек 2015 в 05:10

2 ответа

Лучший ответ

Эквивалент выражения Go x &^ y в языке C - это просто x & ~y. Это буквально "x И (побитовое НЕ из y)".

В разделе спецификации арифметических операторов &^ описывается как операция "немного очистки", которая дает представление того, для чего вы хотите его использовать. Как две отдельные операции, ~y преобразует каждый бит в ноль, который затем очищает соответствующий бит в x. Каждый нулевой бит будет преобразован в единицу, что сохранит соответствующий бит в x.

Итак, если вы думаете о x | y как о способе включения определенных битов x на основе константы маски y, то x &^ y делает обратное и переключает те же биты выкл.

36
James Henstridge 25 Дек 2015 в 02:25

Оператор & ^ очищает бит (И НЕ): в выражении z = x & ^ y каждый бит z равен 0, если соответствующий бит y равен 1; в противном случае он равен соответствующему биту x.

Из языка программирования Go

Пример:

package main
import "fmt"

func main(){
    var x uint8 = 1
    var y uint8 = 1 << 2

    fmt.Printf("%08b\n", x &^ y);

}  

Результат:

00000001

2
Sheila Wendler 9 Апр 2019 в 11:21