无论第i位是什么,我都想将第i位设置为零。将第i位设置为零?
unsigned char pt = 0b01100001;
pt[0] = 0; // its not how we do this...
将其设置为一个,我们可以用一个面具pt | (1 << i)
但我不知道如果多数民众赞成可能,如何创建一个掩码设置0。
无论第i位是什么,我都想将第i位设置为零。将第i位设置为零?
unsigned char pt = 0b01100001;
pt[0] = 0; // its not how we do this...
将其设置为一个,我们可以用一个面具pt | (1 << i)
但我不知道如果多数民众赞成可能,如何创建一个掩码设置0。
您只需将逻辑OR
替换为逻辑AND
操作即可。你会使用该&
操作:
pt = pt & ~(1 << i);
你必须反转你的面具,因为逻辑AND
有1
荷兰国际集团将保持该位同时0
将清除它...所以你需要指定一个0
在您想要清除的位置。具体来说,做1 << i
会给你一个掩码,即000...010..000
,其中1
处于你想要的位的位置,反相会给出111...101...111
。逻辑AND
这将清除你想要的位。
你可以坚持这样的:
// 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);
与按位和尝试。 – juanchopanza 2014-09-23 20:34:43
@juanchopanza确定 – GivenPie 2014-09-23 20:35:12
pt&=〜(1 << i) – cppguy 2014-09-23 20:35:42