当前位置: 首页 > 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.rkmt.cn/news/25698.html

相关文章:

  • 软工第三次作业————结对作业
  • 题解:Luogu P6898 [ICPC 2014 WF] Metal Processing Plant
  • 题解:Luogu P9260 [PA 2022] Miny
  • 题解:Luogu P13544 [OOI 2022] Serious Business
  • 题解:Luogu P14254 分割(divide)
  • 构造单
  • CSP-S 35
  • CSP-S 31
  • 2025网络安全振兴杯wp
  • 服务器CPU市场概况2025
  • CSP-S 24
  • 29-腾讯云COS接入指南与价格说明
  • LLM学习记录DAY7
  • CSP-S 23
  • Recall
  • MySQL 8.0.43社区版本安装流程
  • 读书笔记:深入理解java虚拟机
  • CSP-S 18
  • Project. 2025.11化学小组pre
  • 2025.10.20模拟赛
  • apache服务配置
  • 类欧几里德算法
  • AI助力可再生能源系统优化研究
  • 结对项目:小学四则运算题目生成器
  • 软件工程学习日志2025.10.20
  • P14254 分割(树上计数问题) 题解
  • 完整教程:开源 C++ QT QML 开发(一)基本介绍
  • 102302104刘璇综合实践作业任务一:智能购物平台用户需求调研分析报告——基于195份问卷的用户痛点挖掘
  • 【C++实战(71)】解锁C++音视频编写:FFmpeg从入门到实战
  • 20251020