回覆列表
  • 1 # 與城吳彥祖

    兩者所分配的記憶體的大小不同,因此有著不同的取值範圍。short int的長度是2位元組,所以它所能表達的範圍在2的15次方減1到負的2的15次方。如果一個整數超過2的15次方,也就是32768就會溢位而變成複數。int的長度是4位元組,所以當值超過2的31次方減1,也就是21億5千萬的時候才會溢位,能表達的範圍就比short要寬。long int的長度是8位元組,所以它可以表達至2的63次方減1,也就是9.22乘以10的18次方。當然,前提是你不是用Windows系統,在Windows下長整型和整型沒有區別,都是4位元組,在其他平臺,如Linux或Mac下才是8位元組,這點和Java不同。

  • 2 # TonyDeng

    這是C語言留下的坑。C語言問世之初,是16位機時代,當時的C語言標準只規定int不少於機器字長,這個標準到如今仍然如此。標準規定了最小字長,但沒有說必須是多長,那是由編譯器和平臺自己決定的自由權,不是什麼系統是多長就以為那是政治正確。

    早期的機器字長是16位,則很自然int的長度也是16位,但是這個範圍的整數是不夠用的,所以實現long int把長度翻倍,是32位,用以表示更多的整數範圍。

    到32機時代,同樣是int,但按32位實現,此時的int就是32位的,不過仍然有long int資料,它是64位的。

    64機和系統,一般地int會是64位,但這仍然有編譯器裁決。不同的編譯器商家有不同的策略。有些商家,比如微軟,對int內建型別,C/C++實現為64位,但它有更內部的擴充套件型別_int32和_int64,如果程式設計師不希望有不確定性,選用這些確定長度的型別即可;在C#中,int對映為框架標準型別Int32,與市面上最常見的32位軟體一致。

    有些編譯器,還有long long型別。

    不要以為C的移植性有多好,這種不同字長的機器和系統,同樣寫int的資料,效果是不一樣的,很多移植坑都是因此而來。

  • 中秋節和大豐收的關聯?
  • 一個從不撒謊的人和一個偶爾撒點小謊的人相比,哪個更可靠?為什麼?