2008-10-30 186 views

回答

10

比如你正在開發一個編譯器:

  • unsigned char是8位
  • unsigned short是32位
  • unsigned int爲64位

和unsigned int是'最快的'。在該平臺:

  • uint16_t
  • uint_least16_t將是一個32位的值
  • uint_fast16_t將是一個64位的值

有點神祕,但是那是什麼這是爲了。

他們是多麼有用是另一個故事 - 我總是看到確切的大小變體。這就是人們想要的。我見過的'最少'和'快速'版本用得很接近永遠(它可能只是在示例代碼中 - 我真的不確定)。

+0

從這個答案可以推斷,編寫者的目標是編寫*最大*可移植的代碼應該永遠不會使用uint16_t **並且應該始終使用uint_least16_t或uint_fast16_t? – 2015-10-16 11:06:34

0

它是c標準的一部分。它不需要很好的用例。 :P

請參閱this頁面,並查找標題爲「最小寬度整數類型」的部分。

+0

它有一個很好的用例:例如,從0到32000的for循環計數;計數器變量應該是什麼類型? 16位?但是,在沒有本地16位類型的32位平臺上,這可能會非常慢。 32位?但是,在16位或8位平臺上這將非常緩慢。由於只要至少有16位,精確的位寬無關緊要,所以uint_fast16_t在這裏是理想的類型。但是,當您存儲具有1Mio這種值的數組時,uint_least16_t可能會更好,因爲它可能比uint_fast16_t小得多(節省您的兆字節內存)。 – Mecki 2011-01-11 19:55:37

2

啊,Patrick發佈的鏈接包括這個「typedef名稱uint_leastN_t指定一個寬度至少爲N的無符號整數類型,這樣沒有大小的無符號整數類型至少具有指定的寬度。

所以我目前的理解是:

uint_least16_t是能夠容納UINT16

uint_fast16_t是能夠容納UINT16

uint16_t整整UINT16最快的事情是最小的事情,遺憾的是可能在所有平臺上都不可用,在任何可用的平臺上,uint_least16_t將引用它。所以如果它保證在所有平臺上都存在,我們根本不需要uint_least16_t。

+0

是的 - 但uint16_t不保證存在;認爲克雷(64位整數是他們所有的 - 整數和長整數)。 – 2008-10-30 23:15:14

相關問題