【问题标题】:Do integers, whose size is not a power of two, make sense?大小不是 2 的幂的整数有意义吗?
【发布时间】:2013-03-04 09:11:40
【问题描述】:

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

所以为了进行计算,我必须将值存储在 64 位有符号或无符号整数中。对吗?

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

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

【问题讨论】:

  • 1 是一个很好的整数...可以说是最好的整数!

标签: variables avr 8-bit


【解决方案1】:

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

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

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

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

【讨论】:

  • 这说明了我想说的,更好.. :-)
【解决方案2】:

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

【讨论】:

  • 什么是防止编写一般数学例程,就像学生在学校教的那样,即{从两个变量的 LSB 开始;把它们加起来;如果有更多字节可用,请记住进位并执行相同操作。}
  • 在 CPU 中对整个字的操作在 1 个时钟周期内完成,如果您想逐位进行,您很容易花费 50 倍的时间进行计算 :-)跨度>
  • 基本上,CPU instruction set 处理文字
  • 好的,我的字长是 2 个字节。 48 位是 6 个字节长。为什么没有程序可以处理它?
  • 因为你是个例外 :-) 大多数人都可以接受大量的整数字长。没有什么能阻止你实现自己的逻辑,但它很可能会比“正常”的方式慢得多。
猜你喜欢
  • 1970-01-01
  • 2015-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-13
  • 1970-01-01
  • 2011-11-13
相关资源
最近更新 更多