请问一个关于位操作的算法。好像比较难。
请教一个关于位操作的算法。。。好像比较难。。。。
算法的目的是这样的:
有一个字节,比如0x67。这个字节一共8个位,现在需要把这个字节的低n(n>=1 && n<=8)位取反,其他位不变。
比如0x67,把它的低3位取反,其它位不变,就变成了0x60。
各位高手有什么高效率的算法吗?
------解决方案--------------------
刚刚理解错了,取反的话应该这样:
mask = (1 << n) - 1;
data = (data & ~mask) | (~data & mask);
算法的目的是这样的:
有一个字节,比如0x67。这个字节一共8个位,现在需要把这个字节的低n(n>=1 && n<=8)位取反,其他位不变。
比如0x67,把它的低3位取反,其它位不变,就变成了0x60。
各位高手有什么高效率的算法吗?
------解决方案--------------------
刚刚理解错了,取反的话应该这样:
mask = (1 << n) - 1;
data = (data & ~mask) | (~data & mask);