後整數我已經開始學習C.我已經讀過整數範圍的gcc是 - 214783648 to +2147483647
。程序打印後2147483647
CentOS上使用GCC。
予理解的是,它是2^32被分裂成兩個部分和0
這是在編譯一個強加限制?這有什麼好處?或我的編譯器是32位? (據我所知,我的電腦是64位)。
如果一個人超過這個限制,應該怎麼辦?
由於提前
後整數我已經開始學習C.我已經讀過整數範圍的gcc是 - 214783648 to +2147483647
。程序打印後2147483647
CentOS上使用GCC。
予理解的是,它是2^32被分裂成兩個部分和0
這是在編譯一個強加限制?這有什麼好處?或我的編譯器是32位? (據我所知,我的電腦是64位)。
如果一個人超過這個限制,應該怎麼辦?
由於提前
的整數上漿是特定於平臺。 C標準並沒有說究竟有多少位的int
必須具備的,所有它說是一個int
必須至少爲16位長。這不是對編譯器的限制 - 相反,它是定義你的平臺的許多編譯器屬性之一。
您的平臺的性能不會對您的平臺上的int
的大小產生直接影響。通常可以使用相同的編譯器生成32位和64位代碼(使用gcc,可以使用標誌-m32或-m64),但內置類型的大小不一定會改變。
如果你需要更大範圍的整數,你可以使用long long
,這是保證至少有64位。另外,gcc支持128位整型__int128
。如果你需要更多的範圍,你可以使用任意精度的數學軟件包。
它使用二進制數的多少位整數數據類型必須做的。典型地,整數是由4個字節= 32位,並因此的整數可以存儲2^32個值[0,2 - 1]或[-214783648,2147483647]爲符號整數。
據我知道的行爲,如果一個超出範圍的不確定。這被稱爲Integer overflow。
如果您需要更大的價值,用'的long'代替'int'。 – McLovin
@user long是32位,我是 –
習慣使用和知道這些的大小:'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