代码之家  ›  专栏  ›  技术社区  ›  SlackStack

我如何制作一个只屏蔽32位的某些部分(索引)的位掩码?

  •  1
  • SlackStack  · 技术社区  · 7 年前

    1 回复  |  直到 7 年前
        1
  •  3
  •   Serge    7 年前

    首先是关于表象。您需要二进制数来表示位和掩码。至少在c++14之前,没有直接用c/c++语言实现的二进制文件。因此,在c++14之前,您必须使用十六进制或八进制来表示二进制文件,即。

    0000 1111 == 0x0F
    1111 1010 == 0xFA
    

    0b00001111;
    

    现在,如果你向左或向右移动你的二进制掩码,你将得到以下图片

    00001111 (OxF) << 2 ==> 00111100 (0x3C)
    00001111 (0xF) >> 2 ==> 00000011 (0x03)
    

    int bad = 0x0BAD; // == 0000 1011 1010 1101
    

    您可以按以下方式创建遮罩:

    int mask = 0x00F0; // == 0000 0000 1111 00000
    

    and

    int result = bad & mask; // ==> 0000 0000 1010 000 (0x00A0)
    

    result >> 4 . 我更喜欢按稍微不同的顺序来做,先换“坏”字,然后再换口罩:

    int result = (bad >> 4) & 0xF;