我知道我可以通过使用逐位运算符&
number &= ~(1 << x);
但是我怎样才能清除字节的上半部分或下半部分呢?例如,数字=99
99=0110 0011,清除上半部分,我们得到0000 0011
只需将字节与所需掩码进行AND运算:要清除高位四位,请使用n & 0x0F
;要清除低位四位,则使用n & 0xF0
。
您可以说number &= 15;
。15以二进制表示为CCD_ 4,这意味着前导/高位4位将被清除。
同样,为了清除尾随/低位4位,您可以说number &= 240
,因为240在二进制中表示为1111 0000
。
例如,假设number = 170
,我们想要清除前导/高位四位。CCD_ 8以二进制形式表示为CCD_。所以,如果我们做number &= 15
,我们得到:
1010 1010
& 0000 1111
-------------
0000 1010
(0000 1010
是二进制的10
)
再次假设number = 170
,并且我们想要清除尾部/较低的四个比特,我们可以说:number &= 240
。当我们这样做时,我们得到:
1010 1010
& 1111 0000
-------------
1010 0000
(1010 0000
是二进制的160
)
您想要执行一个and
,其位模式显示您想要保留的内容。
因此,对于您的案例:
number &= 0xf;
由于CCD_ 18是CCD_。
这有时被称为"面具"。
清除下半部分:
number &= ~0xF;
上半部分:
number &= ~0xF0;
以上作品适用于多种类型。对于较大的类型,您需要相应地扩展掩码,例如:
number &= ~UINT64_C(0xF0);