我在byte
中有1位(总是在最低位置),我想要反转。
即给定00000001我想获得00000000和00000000我想要00000001。
bit > 0 ? 0 : 1;
我很想知道如何做到这一点。
答案 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;