在C#中反转1位

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

我这样解决了:

 bit > 0 ? 0 : 1; 

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

怎么样:

 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]; 

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

这就是你想要的:

 bit ^= 1;