小编Wu *_*eng的帖子

如何在C中计算2 ?? / n?

如何计算整数除法2 64 / n?假设:

  • unsigned long 是64位
  • 我们使用64位CPU
  • 1 <n <2 64

如果这样做18446744073709551616ul / n,我们将warning: integer constant is too large for its type在编译时到达。这是因为我们无法在64位CPU中表示2 64。另一种方法如下:

#define IS_POWER_OF_TWO(x) ((x & (x - 1)) == 0)

unsigned long q = 18446744073709551615ul / n;
if (IS_POWER_OF_TWO(n))
    return q + 1;
else
    return q;
Run Code Online (Sandbox Code Playgroud)

是否有更快的(CPU周期)或更干净的(编码)实现?

c integer-division

10
推荐指数
2
解决办法
450
查看次数

编译旧内核的程序

我在最新的Linux机器上静态编译和链接程序,并在另一个9岁的Linux中运行它.它给了我一个错误"致命:内核太旧"并退出.具体来说,新的是Fedora 18(gcc 4.7.2,glibc 2.16,内核3.7.2),旧的是RHEL4.8(glibc 2.3.4,内核2.6.9).由于它是静态链接,因此glibc版本无关紧要.我想这里的问题是该程序调用的系统调用不在旧内核中.

如果旧系统上的开发不是一个选项,我如何在新系统中构建程序并在较旧的系统中运行(甚至更好)?我一直在寻找一种在兼容模式下运行gcc的方法,它只调用旧的系统调用.没有运气了.

linux gcc kernel glibc version

6
推荐指数
1
解决办法
5528
查看次数

任何可查找的压缩库?

我正在寻找一个支持解压期间随机访问的通用压缩库。我想将维基百科压缩成单一的压缩格式,同时我想从中解压/提取个别文章。

当然,我可以单独压缩每篇文章,但这不会给出太大的压缩率。我听说 LZO 压缩文件由许多可以单独解压缩的块组成,但我还没有找到 API+文档。我也可以在 zlib 中使用 Z_FULL_FLUSH 模式,但还有其他更好的选择吗?

compression random-access seek

5
推荐指数
1
解决办法
3723
查看次数

标签 统计

c ×1

compression ×1

gcc ×1

glibc ×1

integer-division ×1

kernel ×1

linux ×1

random-access ×1

seek ×1

version ×1