You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单个字节中实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 07:25:06