当前位置: 首页 > news >正文

扣一个细节问题

请看下这个

uint bits = 0;
for (int y = 0; y < 5; y++) {for (int x = 0; x < 4; x++)bits |= b[y][x] << (y * 4 + x);}

上面的代码把一个[5][4]的byte数组用bits表示,该数组里的元素非0即1.

在经典的The UNIX Programming Environment里有段atoi的代码: 

int n = 9;
while (c = *s++)n = n * 10 + c - '0';

我们是否应该致敬下,bits = (bits << 1) | ...

① 在使用bits的地方,我们想用y * 4 + x得到位置,而不是又丑又慢的(5 - y) * 4 + (4 - x)

② for (int y = 4; y >= 0; y--)... 据说CPU很不喜欢这种“逆序”。

③ 如今* 4不比<< 2慢,再说想不让gcc优化还有点难呢,-O 0都关不全,详情(还是八皇后)。

 

http://www.hskmm.com/?act=detail&tid=35333

相关文章:

  • 10.20java作业
  • 题解:Luogu P14175 【MX-X23-T5】向死存魏
  • 题解:Luogu P14254 分割(divide)
  • 题解:Luogu P6898 [ICPC 2014 WF] Metal Processing Plant
  • 20251020
  • 32-腾讯IM接入资料和定价
  • 题解:AtCoder ARC207A Affinity for Artifacts
  • 构造单
  • [笔记]高斯消元
  • 半导体设备各细分领域的国内外龙头公司
  • CSP-S 34
  • 02.Python百行代码实现抽奖系统
  • CSP-S 35
  • CSP-S 29
  • 2025网络安全振兴杯wp
  • 10.20每日总结
  • CSP-S 31
  • 后缀树
  • ES原理、zookeeper、kafka
  • CF1606E Arena 题解(动态规划)
  • 服务器CPU市场概况2025
  • CSP-S 24
  • 读书笔记:深入理解java虚拟机
  • CSP-S 19
  • CSP-S 20
  • Flutter应用设置插件 - 轻松打开iOS和Android系统设置
  • CSP-S 22
  • Project. 2025.11化学小组pre
  • MySQLDay1
  • 蛋白表达标签:重组蛋白研究的精妙引擎