我有 1 位byte
(始终处于最低顺序位置)我想反转。
即给定 00000001 我想要得到 00000000,而对于 00000000 我想要 00000001。
我是这样解决的:
bit > 0 ? 0 : 1;
我很好奇还能怎么做。
怎么样:
bit ^= 1;
这只是将第一位与 1 进行异或,从而切换它。
如果您想翻转位#N,从右侧的 0 向左侧的 7 计数(对于一个字节),您可以使用以下表达式:
bit ^= (1 << N);
这不会干扰任何其他位,但如果该值仅是十进制值中的 0 或 1(即所有其他位均为 0),则也可以使用以下内容:
bit = 1 - bit;
同样,如果只设置一个位,则可以使用与第一个翻转位 #N 中相同的值作为 1:
bit = (1 << N) - bit;
当然,此时您实际上并没有以相同的方式进行位操作。
您的表达式也很好,但同样会操纵整个值。
另外,如果您将单个位表示为bool
值,你可以这样做:
bit = !bit;
这会切换该值。
更多的是一个笑话:
当然,“企业”方式是使用查找表:
byte[] bitTranslations = new byte[256];
bitTranslations[0] = 1;
bitTranslations[1] = 0;
bit = bitTranslations[bit];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)