2013-03-04 48 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

相關問題