首页 > 解决方案 > 如何在一个字节中设置 N 个连续位,从 LSB 开始?

问题描述

我想在一个字节中设置 N 个位(字节始终以 0 开头)并使用指针存储它。想象:

void SetBits(uint8_t bytesToSet, uint8_t* var) {}

我将如何实现这个(使用C)?

标签: cbit-manipulation

解决方案


应该在哪里设置 N 位?向左,向右?

如果你想让那些 N 位在右边,你的函数应该是这样的:

void SetBits(uint8_t bitsToSet, uint8_t* var)
{
    if (bitsToSet < 8)
        *var = (1 << bitsToSet) - 1;
    else {*var = 0; *var = ~(*var);}
}

例如,对于 call SetBits(5,&a), variablea将保存 value 0b00011111


推荐阅读