在C#中反转1位

Mat*_*sen 19 .net c# bit-manipulation

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

我这样解决了:

bit > 0 ? 0 : 1;
Run Code Online (Sandbox Code Playgroud)

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

ang*_*son 43

怎么样:

bit ^= 1;
Run Code Online (Sandbox Code Playgroud)

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

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

bit ^= (1 << N);
Run Code Online (Sandbox Code Playgroud)

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

bit = 1 - bit;
Run Code Online (Sandbox Code Playgroud)

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

bit = (1 << N) - bit;
Run Code Online (Sandbox Code Playgroud)

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

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

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

bit = !bit;
Run Code Online (Sandbox Code Playgroud)

这切换了价值.


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

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

bit = bitTranslations[bit];
Run Code Online (Sandbox Code Playgroud)