2013-03-04 46 views
1

这是一个8位体系结构,字大小为16位。我现在需要使用一个48位整型变量。我的理解是,libm实现8,16,32,64位操作(加法,乘法,有符号和无符号)。整数的大小不是2的幂,是否有意义?

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

如果是这样,那么有什么来防止使用一般例程?例如,对于另外:

  1. 开始与LSB两个变量的
  2. 把它们加起来
  3. 如果有更多的字节是可用的继续,otherways转到准备
  4. 移两个变量1个字节向右
  5. 转到1)
+1

1是一个很不错的整数...可以说是最好的一个! – 2013-03-04 09:12:55

回答

3

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

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

您可以实现操作的功能,说add(int48_t, int48_t),但随后的编译器将不能够做到优化,例如常量折叠等

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

+0

这就是我想说的,更好.. :-) – 2013-03-05 08:40:18

2

这是正确的,保存几位(几乎所有情况下)都不值得实现自己的逻辑的麻烦。

+1

什么是防止一般数学例程的写作,就像学生在学校教授一样,即{从两个变量的LSB开始;加起来;如果有更多的字节可用,请记住进位并执行相同的操作。} – Vorac 2013-03-04 09:50:20

+0

对CPU中整个字的操作在1个时钟周期内完成,如果您想逐位进行操作,那么您可以轻松地花费50倍时间做计算:-) – 2013-03-04 10:02:52

+0

基本上,CPU [指令集](http://en.wikipedia.org/wiki/Instruction_set)对单词 – 2013-03-04 10:06:56

相关问题