2015-12-25 17 views
8

Nie mogę naprawdę nazwać nazwy ORAZ NIE i uzyskać przydatne wyniki, co to dokładnie jest ten operator i jak mogę to zrobić w języku takim jak C? Sprawdziłem specyfikację i nie ma tam nic przydatnego, ale lista, która mówi: &^(I NIE).The &^operator in golang?

+0

W jakim kontekście? '& ^' nie jest operatorem samodzielnie, ale może być czymś w rodzaju '7 BITWISE-AND BITWISE-NEGATION (1)' –

+0

Widziałem to w tym kodzie [tutaj] (https://github.com/ golang/go/blob/b39329bff56abf35edc91537252782814a7a4f84/src/unicode/utf8/utf8.go # L213), używają go do dekodowania utf8. – mosmo

Odpowiedz

13

Ekwiwalent C wyrażenia Go x &^ y to tylko x & ~y. To jest dosłownie "x AND (bitowo NIE od y)".

W arithmetic operators section of the spec opisano &^ jako "bit clear" operacji, która daje pojęcie, co chcesz go używać. Jako dwie oddzielne operacje, każdy konwertuje jeden bit na zero, co spowoduje wyczyszczenie odpowiedniego bitu w x. Każdy bit zerowy zostanie przekonwertowany na taki, który zachowa odpowiedni bit w x.

Więc jeśli myślisz o x | y jako sposób włączyć niektórych bitów x opartych na masce stała y, następnie x &^ y robi odwrotnie i zamienia te same bity off.

+0

Świetne, dziękuję bardzo :) – mosmo

+0

To było bardzo jasne wyjaśnienie, szczególnie w przypadku użycia . –