从C中无符号int的结尾抓取'n'个二进制位?位屏蔽?

时间:2018-11-19 17:37:03

标签: c binary hex bit bitmask

我对C很陌生,而且似乎弄乱了我的位掩码。据我了解,这是一种从二进制值中获取或创建子集的方法。

说我想获取一个无符号int值的后8位,其中包含00001111000011110000111100001111。

我将如何使用AND / OR来获取最后8个?

4 个答案:

答案 0 :(得分:2)

这是一种更通用的解决方案,可以根据您感兴趣的位数生成掩码。

unsigned int last_n_bits(unsigned int value, int n)
{
    unsigned int mask = -1;
    if (n < sizeof(unsigned) * CHAR_BIT)
        mask = ((1<<n)-1);
    return value & mask;
}

答案 1 :(得分:0)

您可以使用BINARY AND运算符执行二进制掩码:

unsigned char last_eight_bits = my_number & 0b11111111

答案 2 :(得分:0)

屏蔽所有位> 0xff

value & 0xffu

答案 3 :(得分:0)

  

说我想获取一个无符号int值的后8位,其中包含   00001111000011110000111100001111。

     

我将如何使用AND / OR来获取最后8个?

在这种情况下,您将使用AND。以下代码将获取8个最低有效位:

unsigned int number = 0x0F0F0F0Fu;
unsigned int mask = 0x000000FFu; // set all bits to "1" which you want to grab
unsigned int result = number & mask; // result will be 0x0000000F

&运算符用于每个位的AND运算:

    00001111000011110000111100001111
AND 00000000000000000000000011111111
------------------------------------
    00000000000000000000000000001111

请注意,“ 0 AND X = 0”和“ 1 AND X = X”。您可以在https://en.wikipedia.org/wiki/Boolean_algebra进行进一步调查。