将第i位设为零?

时间:2014-09-23 20:33:49

标签: c bit-manipulation

无论第i位是什么,我都希望将第i位设置为零。

  unsigned char pt = 0b01100001;
  pt[0] = 0; // its not how we do this... 

将其设置为1,我们可以使用掩码pt | (1 << i),但我不知道如何设置掩码以设置0,如果可能的话。

2 个答案:

答案 0 :(得分:7)

您只需要使用逻辑OR操作替换逻辑AND。您可以使用&运算符:

pt = pt & ~(1 << i);

你必须反转你的面具,因为AND的逻辑1将保持位,0将清除它...所以你' d需要在要清除的位置指定0。具体来说,执行1 << i将为您提供000...010..000的掩码,其中1位于您想要的位位置,反转此值将为111...101...111。使用此逻辑AND将清除您想要的位。

答案 1 :(得分:1)

你可以坚持下去:

// 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);