1

这是一个 8 位架构,字长为 16 位。我现在需要使用一个 48 位整数变量。我的理解是 libm 实现了 8、16、32、64 位操作(加法、乘法、有符号和无符号)。

因此,为了进行计算,我必须将值存储在 64 位有符号或无符号整数中。正确的?

如果是这样,有什么可以防止使用一般例程?例如,对于添加:

  1. 从两个变量的 LSB 开始
  2. 把它们加起来
  3. 如果有更多字节可用,则继续,否则准备就绪
  4. 将两个变量都向右移动 1 个字节
  5. 转到 1)
4

2 回答 2

3

libm 实现了标准大小的类型的例程,编译器选择正确的用于表达式。

如果你想实现自己的类型,你可以。如果您想使用通常的运算符,那么您必须进入编译过程以让编译器选择您的。

您可以将操作实现为函数,例如add(int48_t, int48_t),但是编译器将无法进行常量折叠等优化。

因此,没有什么能阻止您实现自己的自定义编译器,但它真的有必要吗?你真的需要节省那个空间吗?如果是这样,那就去吧!

于 2013-03-05T01:51:01.750 回答
2

没错,节省几位(几乎在所有情况下)不值得麻烦实现自己的逻辑。

于 2013-03-04T09:13:35.530 回答