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

如何用C语言统计32位无符号整数中8位二进制模式的出现次数?

解决方案

核心思路

直接对二进制位进行位运算处理,完全不需要字符串或数组这类聚合类型:

  • 用0xFF(二进制全1的8位掩码)提取32位整数的低8位片段
  • 每次将32位整数逻辑右移1位,再提取新的低8位与目标模式对比
  • 遍历所有可能的8位窗口(共25个,因为32-8+1=25),统计匹配次数

完整代码

#include <stdio.h>

int main() {
    unsigned int num, pattern;
    scanf("%u", &num);
    scanf("%u", &pattern);
    
    pattern &= 0xFF; // 确保模式仅保留低8位
    unsigned int count = 0;
    
    // 遍历所有可能的8位起始位置(0到24)
    for (int i = 0; i <= 24; i++) {
        unsigned int current_segment = (num >> i) & 0xFF;
        if (current_segment == pattern) {
            count++;
        }
    }
    
    printf("%u\n", count);
    return 0;
}

关键细节解释

  • 逻辑右移:无符号整数的>>操作是逻辑右移,高位补0,保证每次移位后新的低8位是正确的后续片段
  • 掩码截取:& 0xFF能精准截取当前移位后的低8位,屏蔽高位干扰
  • 循环范围:32位整数中,8位模式的起始位可以从第0位到第24位(包含),对应25个连续的8位窗口,覆盖所有可能的匹配位置
  • 模式预处理:pattern &= 0xFF确保即使输入的模式超过8位,也只会保留低8位,符合题目中“8位模式”的要求(题目说无需校验,但这个操作不违反限制,还能避免意外错误)

示例验证

输入32位整数514(二进制00000000 00000000 00000010 00000010)和8位模式2(二进制00000010):

  • 当i=0时,(514 >> 0) & 0xFF结果为2,匹配
  • 当i=16时,(514 >> 16) & 0xFF结果为2,匹配
  • 其余位置均不匹配,最终统计次数为2,与示例一致

内容的提问来源于stack exchange,提问作者Jakov Gl.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:50:45