在C#中反转1位

时间:2010-04-09 08:12:35

标签: c# .net bit-manipulation

我在byte中有1位(总是在最低位置),我想要反转。 即给定00000001我想获得00000000和00000000我想要00000001。

我解决了这个问题:

bit > 0 ? 0 : 1;

我很想知道如何做到这一点。

2 个答案:

答案 0 :(得分:41)

怎么样:

bit ^= 1;

这只是XOR的第一位用1来切换它。

如果你想翻转#N位,从右边的0到左边的7(一个字节),你可以使用这个表达式:

bit ^= (1 << N);

这不会干扰任何其他位,但如果该值仅为十进制值的0或1(即所有其他位为0),则也可以使用以下内容:

bit = 1 - bit;

同样,如果只设置一个位,则可以使用与第一个相同的值来转换位#N:

bit = (1 << N) - bit;

当然,在那一点上,你实际上并没有在同样的意义上进行位操作。

你所拥有的表达式也很好,但同样会操纵整个值。

另外,如果您将单个位表示为bool值,则可以执行此操作:

bit = !bit;

切换值。


更多笑话: 当然,“企业”方式是使用查找表:

byte[] bitTranslations = new byte[256];
bitTranslations[0] = 1;
bitTranslations[1] = 0;

bit = bitTranslations[bit];

答案 1 :(得分:4)

您的解决方案不正确,因为如果位== 2(10),那么您的赋值将产生位== 0(00)。

这就是你想要的:

bit ^= 1;