如何在一个字节中设置 N 个连续位,从 LSB 开始?
How to set N amount of consecutive bits in a byte, starting from LSB?
我想在一个字节中设置 N 个位(字节总是从 0 开始)并使用指针存储它。想象一下:
void SetBits(uint8_t bytesToSet, uint8_t* var) {}
我将如何实现它(使用 C)?
那N位应该设置在哪里?向左,向右?
如果你想要右边的 N 位,你的函数应该如下所示:
void SetBits(uint8_t bitsToSet, uint8_t* var)
{
if (bitsToSet < 8)
*var = (1 << bitsToSet) - 1;
else {*var = 0; *var = ~(*var);}
}
例如,对于调用 SetBits(5,&a)
,变量 a
将保存值 0b00011111
。
我想在一个字节中设置 N 个位(字节总是从 0 开始)并使用指针存储它。想象一下:
void SetBits(uint8_t bytesToSet, uint8_t* var) {}
我将如何实现它(使用 C)?
那N位应该设置在哪里?向左,向右?
如果你想要右边的 N 位,你的函数应该如下所示:
void SetBits(uint8_t bitsToSet, uint8_t* var)
{
if (bitsToSet < 8)
*var = (1 << bitsToSet) - 1;
else {*var = 0; *var = ~(*var);}
}
例如,对于调用 SetBits(5,&a)
,变量 a
将保存值 0b00011111
。