2014-02-20 37 views
1

後整數我已經開始學習C.我已經讀過整數範圍的gcc是 - 214783648 to +2147483647程序打印後2147483647

CentOS上使用GCC。

予理解的是,它是2^32被分裂成兩個部分和0

  • 這是在編譯一個強加限制?這有什麼好處?或我的編譯器是32位? (據我所知,我的電腦是64位)。

  • 如果一個人超過這個限制,應該怎麼辦?

由於提前

+0

如果您需要更大的價值,用'的long'代替'int'。 – McLovin

+0

@user long是32位,我是 –

+0

習慣使用和知道這些的大小:'std :: uint8_t''std :: uint16_t','std :: uint32_t','std :: uint64_t'和他們的已簽名的同行:'std :: int8_t','std :: int16_t','std :: int32_t','std :: int64_t' ..最後習慣瞭解和使用'std :: size_t'。 – Brandon

回答

1

的整數上漿是特定於平臺。 C標準並沒有說究竟有多少位的int必須具備的,所有它說是一個int必須至少爲16位長。這不是對編譯器的限制 - 相反,它是定義你的平臺的許多編譯器屬性之一。

您的平臺的性能不會對您的平臺上的int的大小產生直接影響。通常可以使用相同的編譯器生成32位和64位代碼(使用gcc,可以使用標誌-m32或-m64),但內置類型的大小不一定會改變。

如果你需要更大範圍的整數,你可以使用long long,這是保證至少有64位。另外,gcc支持128位整型__int128。如果你需要更多的範圍,你可以使用任意精度的數學軟件包。

0

它使用二進制數的多少位整數數據類型必須做的。典型地,整數是由4個字節= 32位,並因此的整數可以存儲2^32個值[0,2 - 1]或[-214783648,2147483647]爲符號整數。

據我知道的行爲,如果一個超出範圍的不確定。這被稱爲Integer overflow

這裏是一個必須閱讀:http://en.wikipedia.org/wiki/Binary_number