如何创建单字节5位的滑动窗口?

问题描述 投票:0回答:1

这是我想要发生的事情的视觉效果5 bit sliding window

换句话说,我想要一个5位的滑动窗口。我需要在一个字节中存储 5 个事件的历史记录。我使用 5 个最高有效位来执行此操作。第一次事件发生时,我想将其存储在第7位(最高有效位)中,第二次事件发生时,无论是真还是假,我想将最新的事件历史记录存储在第7位中,以及之前的内容位 7 将滑到位 6。这将无限重复,将最新事件存储在位 7 中并将所有内容向右滑动,但只保留 5 个事件。

这是我迄今为止尝试过的,但我认为我的概念还很遥远。

编辑:for循环只是模仿存储历史的几个循环,所以后面不会使用。

    unsigned char byte = 0;

    bool bit7 = true;
    bool bit6 = false;
    bool bit5 = true;
    bool bit4 = true;
    bool bit3 = false;

    // Set the individual bits in the byte
    byte |= (bit7 << 7);
    byte |= (bit6 << 6);
    byte |= (bit5 << 5);
    byte |= (bit4 << 4);
    byte |= (bit3 << 3);

    for (int i = 0; i <= 4; i++)
    {
        if (i == 0)
        {
            byte = bit7 << 7;
        }

        if (i == 1)
        {
            byte |= bit6 << 6;
        }

        if (i == 2)
        {
            byte |= bit5 << 5;
        }

        if (i == 3)
        {
            byte |= bit4 << 4;
        }

        if (i == 4)
        {
            byte |= bit3 << 3;
        }
    }
c bit-manipulation byte bit-shift sliding-window
1个回答
0
投票

如果我很好地理解你的任务,那就很简单了

uint8_t addevent(int event, uint8_t stored)
{   
    stored >>= 1;
    stored |= (!!event) << 7;

    return stored;
}
© www.soinside.com 2019 - 2024. All rights reserved.