Как насчет:
bit ^= 1;
Это просто XOR - первый бит с 1, который переключает его.
Если вы хотите перевернуть бит #N, считая от 0 справа до 7 слева (для байта), вы можете использовать это выражение:
bit ^= (1 << N);
Это не будет мешать другим битам, но если значение будет когда-либо только 0 или 1 в десятичном значении (т. Е. Все остальные биты равны 0), то также может использоваться следующее:
bit = 1 - bit;
Опять же, если будет установлен только один бит, вы можете использовать то же значение для 1, что и в первом, чтобы перевернуть бит #N:
bit = (1 << N) - bit;
Конечно, в этот момент вы на самом деле не выполняете битовую манипуляцию в том же смысле.
Выражение, которое у вас есть, тоже хорошо, но опять-таки будет манипулировать всем значением.
Кроме того, если вы выразили один бит как значение bool
, вы можете сделать это:
bit = !bit;
Который переключает значение.
Еще шутка :
Конечно, «корпоративный» способ будет использовать таблицу поиска:
byte[] bitTranslations = new byte[256];
bitTranslations[0] = 1;
bitTranslations[1] = 0;
bit = bitTranslations[bit];