无论第i位是什么,我都希望将第i位设置为零。
unsigned char pt = 0b01100001;
pt[0] = 0; // its not how we do this...
将其设置为1,我们可以使用掩码pt | (1 << i)
,但我不知道如何设置掩码以设置0,如果可能的话。
答案 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);