2016-02-01 38 views

回答

4

intN_tN位長一個確切的寬度整數類型。每C11草案N1570 7.2.1.1它們被定義爲:

typedef名intN_t表示具有寬度N,沒有填充比特,和一個二的補碼錶示的符號整數類型。因此,int8_t表示寬度恰好爲8位的帶符號整數類型。

然而

這些類型都是可選的。但是,如果實現提供寬度爲8,16,32或64位的整數類型,沒有填充位,並且(對於有符號類型)具有二進制補碼錶示,則它應該定義相應的typedef名稱。

這些類型在C和C++中有效。我們之所以有這些正常shortintlong long對它們的大小沒有保證,除了最小範圍

在C#中,這將等同於Int16的,的Int32和Int64的類型。在java的,我們可以用byteshortintlong那些都是guaranteed to be of an exact width.

+0

你能引用你的報價來源嗎? (哪種C99類型的草案,還是來自真正的草案?)http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf似乎是某種草案類似(完全一樣?)的措辭。 – Yakk

+0

@Yakk我加了我的源碼。我完全錯過了那部分。抱歉。 – NathanOliver

5

C++標準要求int8_tint16_tint32_tint64_t是完全指定的寬度,與u前綴無符號對應,只有在目標平臺上存在這樣的類型。是的,這些都是有效的,C中的標準類型.Java和C#不包含相同名稱的此類整數數據類型。

相關類型是intN_least_tintN_fast_t,其中「最少」類型至少具有指定的位數。

0

它們具有基於std C++的相同範圍。更多細節here

和他們有效的C,但不知道Java和C#

+0

這個回答意味着,C++標準規定,每一個編譯器支持'INT主要(){X的int64_t;作爲一個有效的程序。它不是。你能澄清嗎? – Yakk

+0

它們在'stdint.h'中可用。您是否包含標題 – dlmeetei

+0

C++標準*沒有強制要求它們在'stdint.h'中。它說可能在那裏,如果他們是必須有某些屬性。在你的'stdint.h'(或我的)中會發生什麼並不能解決問題。 – Yakk

相關問題