c-如何从一个数字中清除半个字节



我知道我可以通过使用逐位运算符&

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

最新更新