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)
归档时间: |
|
查看次数: |
14678 次 |
最近记录: |