C语言中的位运算与掩蔽

C语言中的位运算与掩蔽,c,bit-manipulation,byte,bit,C,Bit Manipulation,Byte,Bit,所以我很难通过掩蔽来分离出一定数量的比特。基本上,我有一定数量的位,我想从一个字节(8位)屏蔽(我们称之为偏移量)。有两种面具我需要帮助: 第一个:假设偏移量=4,我有一个二进制1110 0001的字节。我想屏蔽size offset的最后一位,这样我就可以得到1110 0000的最后一个字节(所以屏蔽最后4位) 第二个:假设偏移量是3,我有一个字节是二进制的10110010。现在我想屏蔽大小偏移的前几位,这样我就有了0001 0010的最后一个字节 我已经粘贴了到目前为止的代码。目前它不适用于

所以我很难通过掩蔽来分离出一定数量的比特。基本上,我有一定数量的位,我想从一个字节(8位)屏蔽(我们称之为偏移量)。有两种面具我需要帮助:

第一个:假设偏移量=4,我有一个二进制1110 0001的字节。我想屏蔽size offset的最后一位,这样我就可以得到1110 0000的最后一个字节(所以屏蔽最后4位)

第二个:假设偏移量是3,我有一个字节是二进制的10110010。现在我想屏蔽大小偏移的前几位,这样我就有了0001 0010的最后一个字节

我已经粘贴了到目前为止的代码。目前它不适用于我想要创建的第一个掩码,因为它屏蔽了前几位,而不是最后一位。我不确定是否正确创建了遮罩

uint8_t mask = (1 << offset) - 1;
byte = (byte & mask);

uint8\u t mask=(1要屏蔽低位
偏移量
位,您对
mask
的计算是可以的,但表达式不是。它应该是:

byte = (byte & ~mask);
或者简单地说:

byte &= ~mask;

要使用偏移量
(1)计算掩码,您需要定位掩码的位
uint8\u t mask=((1欢迎使用StackOverflow!请使用并阅读“”。然后请回来回答您的问题。--您是否介意提供一个?或者至少提供一些您期望的
偏移量和掩码的具体示例?例如:
offset=3
给出
mask=0001110
(将左3位设置为0,保留下4位,将最右边的位设置为0)。
unsigned mask = ~0U >> (sizeof(unsigned) * CHAR_BIT - offset);
bits &= ~mask;
bits &= ~0U << offset;