2014-09-23 66 views
1

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

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

将其设置为一个,我们可以用一个面具pt | (1 << i)但我不知道如果多数民众赞成可能,如何创建一个掩码设置0。

+1

与按位和尝试。 – juanchopanza 2014-09-23 20:34:43

+0

@juanchopanza确定 – GivenPie 2014-09-23 20:35:12

+1

pt&=〜(1 << i) – cppguy 2014-09-23 20:35:42

回答

5

您只需将逻辑OR替换为逻辑AND操作即可。你会使用该&操作:

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

你必须反转你的面具,因为逻辑AND1荷兰国际集团将保持该位同时0将清除它...所以你需要指定一个0在您想要清除的位置。具体来说,做1 << i会给你一个掩码,即000...010..000,其中1处于你想要的位的位置,反相会给出111...101...111。逻辑AND这将清除你想要的位。

+0

谢谢,很有意义 – GivenPie 2014-09-23 20:50:18

+0

@GivenPie - 别担心!...但是被指出的重复问题更加全面。建议你也阅读。 – rayryeng 2014-09-23 21:15:53

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