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

C语言位操作问题:如何实现OddBits函数(仅用|和<<)

问题分析与修正

错误点

  1. 未初始化局部变量x:代码中int x;未赋值,局部变量默认是未初始化的垃圾值,运行时恰好为0,导致后续所有移位、或运算结果都是0,最终返回值与预期的0xaaaaaaaa不符。
  2. 构造目标值逻辑错误:原代码没有从正确的基础常量出发构建目标值,完全偏离了生成奇数位全1(对应0xaaaaaaaa)的路径。

修正方案

目标值0xaaaaaaaa是32位中所有**奇数索引位(从0开始计数,第1、3、5...31位)**为1的结果,我们可以从合法小常量(0xaa,不超过0xFF)出发,通过移位和或运算逐步扩展到32位:

int OddBits(void) {
  int x = 0xaa;  // 初始值:10101010,占低8位的奇数位
  x |= x << 8;   // 扩展到16位:0xaaaa
  x |= x << 16;  // 扩展到32位:0xaaaaaaaa
  return x;
}

合规性验证

  • 常量0xaa不超过0xFF,符合要求
  • 仅使用了|和<<操作,共4次操作,远低于最多6次的限制
  • 无循环、条件语句,未转换为无符号类型
  • 32位机器下返回正确的0xaaaaaaaa(十进制值为-1431655766)

内容的提问来源于stack exchange,提问作者Josh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 16:55:15