将第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); 

您必须反转掩码,因为逻辑AND1将保持该位而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);