Jak o:
bit ^= 1;
To po prostu XOR za pierwszy bit 1, który przełącza go.
Jeśli chcesz odwrócić bitowy #N, licząc od 0 po prawej stronie w kierunku 7 po lewej stronie (na bajt), można użyć tego wyrażenia:
bit ^= (1 << N);
to nie będzie przeszkadzać każda inna bity, ale jeśli wartość jest tylko kiedykolwiek będzie 0 lub 1 w wartości dziesiętnych (tzn wszystkie pozostałe bity są 0.), wówczas po można stosować także:
bit = 1 - bit;
Ponownie, jeśli istnieje tylko będzie ustawiony jeden bit, możesz użyć tej samej wartości dla 1, jak w pierwszym, aby odwrócić bit #N:
bit = (1 << N) - bit;
Oczywiście, w tym momencie nie robisz bitowej manipulacji w tym samym sensie.
Wyrażenie, które masz, jest również w porządku, ale znowu będzie manipulować całą wartością.
Ponadto, jeśli wyraził jeden bit jako wartość bool
, można to zrobić:
bit = !bit;
Które przełącza wartość.
Więcej żart: Oczywiście, "enterprisey" sposób byłoby użyć tabeli odnośników:
byte[] bitTranslations = new byte[256];
bitTranslations[0] = 1;
bitTranslations[1] = 0;
bit = bitTranslations[bit];
Ma to tę zaletę, że nie wymaga pierwszy bit być wybrany jako pierwszy, jak również. –
Najpierw chciałem użyć! ale potem odkrył, że to tylko do booli. Zabawne rzeczy, działające na tym poziomie. –
Dodałbym argument "wyrażając to jako bool" - w zależności od tego, co robisz, może sprawić, że kod będzie trochę łatwiejszy do odczytania dla następnego faceta, który ma go utrzymać. – Paddy