Инвертируйте 1 бит в C#

У меня есть 1 бит в a byte (всегда в положении самом низкоуровневом), что я хотел бы инвертировать. т.е., учитывая 00000001 я хотел бы добраться 00000000, и с 00000000 я хотел бы 00000001.

Я решил его как это:

bit > 0 ? 0 : 1;

Мне любопытно видеть, как еще это могло быть сделано.

19
задан Matt Jacobsen 9 April 2010 в 08:12
поделиться

2 ответа

Как насчет:

bit ^= 1;

Это просто первый бит XOR с 1, который переключает его.

Если вы хотите перевернуть бит #N, считая от 0 справа до 7 слева (для байта), вы можете использовать это выражение:

bit ^= (1 << N);

Это не повлияет на другие биты, но если value может быть только 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];
43
ответ дан 30 November 2019 в 02:48
поделиться

Ваше решение неверно, потому что если bit == 2 (10), то ваше присвоение даст bit == 0 (00).

Это то, что вам нужно:

bit ^= 1;
4
ответ дан 30 November 2019 в 02:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: