将第i位设为零?
无论第i位是什么,我都想将第i位设置为零。
unsigned char pt = 0b01100001; pt[0] = 0; // its not how we do this...
设置为1,我们可以使用掩码pt | (1 << i)
pt | (1 << i)
但我不知道如何设置0的掩码,如果可能的话。
您只需要使用逻辑AND
操作替换逻辑OR
。 你可以使用&
运算符:
pt = pt & ~(1 << i);
您必须反转掩码,因为逻辑AND
与1
将保持该位而0
将清除它...因此您需要在要清除的位置指定0
。 具体来说,做1 << i
将给你一个000...010..000
的面具,其中1
位于你想要的位位置,反转这将给出111...101...111
。 逻辑与此相关将清除您想要的位。
你可以坚持下去:
// Set bit at position `bitpos` in `pt` to `bitval` unsigned char bitpos = 1; unsigned char pt = 0b01100001; bool bitval = 1; // Clear the bit pt &= ~(1u << bitpos); // Set the bit pt |= (bitval << bitpos);