如何在单个字节中实现5位滑动窗口?
5位滑动窗口事件历史实现
需求概述
需要用单个字节的最高5位(bit7至bit3)存储最近5个事件的历史,每次新事件到来时执行以下操作:
- 将当前存储的内容右移1位(自动丢弃最旧的bit3数据)
- 把新事件的布尔值存入bit7(最高有效位)
- 始终仅保留最近的5个事件记录
原代码问题分析
你当前的代码只是手动初始化了固定的5个位值,没有实现滑动更新的核心逻辑,无法处理后续新事件的动态插入与历史移位。
正确实现代码
#include <stdio.h> // 向滑动窗口中添加新事件 void add_event(unsigned char *window, bool new_event) { // 1. 先将现有内容右移1位,丢弃最旧的bit3 *window = *window >> 1; // 2. 清除bit7(避免移位后残留的高位干扰),然后写入新事件 *window &= ~(1 << 7); *window |= (new_event << 7); } int main() { unsigned char event_window = 0; // 模拟事件序列:true, false, true, true, false bool events[] = {true, false, true, true, false}; int event_count = sizeof(events)/sizeof(events[0]); for (int i = 0; i < event_count; i++) { add_event(&event_window, events[i]); printf("添加第%d个事件后,窗口值:0x%02X\n", i+1, event_window); } // 再添加一个新事件(true),观察滑动效果 add_event(&event_window, true); printf("添加第6个事件后,窗口值:0x%02X\n", event_window); return 0; }
代码说明
add_event函数是核心:先右移窗口内容,再将新事件写入最高位,确保每次操作后都只保留最近5个事件- 测试代码模拟了初始5个事件的添加,以及第6个事件到来时的滑动效果(此时最开始的true会被丢弃)
内容的提问来源于stack exchange,提问作者crose72
相关产品推荐
相关产品推荐

