C中short int(或short)和int是不同的?他們有相同的大小和範圍。如果它們基本相同,那麼使用兩種數據類型有什麼用處?C中的「short int」和「int」有什麼區別?
回答
他們可能具有相同的大小,但保證int
等於或大於short int
。
什麼實際保證的是,*範圍的'*短int'至少-32767 ... +32767,和'短int'範圍int'的'範圍的一個子集。由此可見,「short int」和「int」都至少爲16位。由於填充位,理論上可以使用sizeof(short int)> sizeof(int)',但這是不太可能的。 –
@KeithThompson可以詳細說明sizeof(short int)> sizeof(int)'嗎? – SomeWittyUsername
@icepack:整數類型可以有填充位,這些位不會影響值。例如,一個符合的實現可能在理論上具有32位(16位填充位)和24位(全部有效)的「短」。我想不出有什麼理由去做這樣愚蠢的事情,但標準並不禁止它。 –
這取決於系統。有些操作系統對於這兩種類型的長度都不一樣。
永遠不要依賴C中給定大小的數據類型。如果有疑問,請務必檢查limits.h中的邊界。
除,當然,如果你使用'uint32_t'和朋友'
這是C99標準的一部分,它將我們帶回到其他人提出的使用OS /編譯器的問題。 –
理論上/ C標準,它們可以是任何尺寸的,只要short <= int
。
在現實世界中,尺寸是如何實現的。
CPU short int
8 bit 16 16
16 bit 16 16
32 bit 16 32
64 bit 16 32
你有沒有在64位選中它在ANSI C在Linux在64位和Visual Studio中的窗口,我只是想知道.. –
@BharatSharma 64位只對「長」和「長長」的尺寸有所不同。顯然,一些64位系統定義長達64位,而其他系統實現C99/C11標準,並使用「long long」表示64位,long表示32位。 – Lundin
感謝實際上,一旦我發現相關問題很長,所以我想這也許可以縮短... :) –
所有我們現在可以肯定的是:整數類型的
2 <= sizeof(short) <= sizeof(int)
5.2.4.2.1尺寸<limits.h>
給出了最小規格:
1 [...] Thei ř實現定義的值必須在大小(絕對值)等於或大於示出的那些[...]
- UCHAR_MAX 255 // 2月8日至1日
- USHRT_MAX 65535 //二月16日至1日
- UINT_MAX 65535 //二月十六日至一日
- ULONG_MAX 4294967295 // 2 32 - 1
- 18446744073709551615 ULLONG_MAX // 2 64 - 1
6.2。5種類型然後說:
8對於任何兩個整數類型與相同的符號性和不同的整數轉換秩 (見6.3.1.1),具有更小的整數轉換等級的類型的值的範圍是 其他類型的值的子範圍。
和6.3.1.1布爾,字符,和整數確定相對排名轉換:
1的每一個整數類型具有限定的整數轉換等級如下:
- 的長長整型的秩應大於長整型的秩,其 應大於INT的秩更大,這應是比短 INT的秩時,WHI更大ch應大於簽名字符的等級。如果任何
- 任何無符號整數類型的秩必須等於相應 符號整型的秩。
- 對於所有整數類型T1,T2,和T3,如果T1具有大於T2秩和T2具有 大於T3秩,則T1具有比T3
更大秩
我正在工作的今天一樣。我的結論是,它取決於你的程序執行的機器體系結構的字長。 根據C99 limits.h文檔。
/* Minimum and maximum values a `signed short int' can hold. */
# define SHRT_MIN (-32768)
# define SHRT_MAX 32767
/* Maximum value an `unsigned short int' can hold. (Minimum is 0.) */
# define USHRT_MAX 65535
/* Minimum and maximum values a `signed int' can hold. */
# define INT_MIN (-INT_MAX - 1)
# define INT_MAX 2147483647
/* Maximum value an `unsigned int' can hold. (Minimum is 0.) */
# define UINT_MAX 4294967295U
/* Minimum and maximum values a `signed long int' can hold. */
# if __WORDSIZE == 64
# define LONG_MAX 9223372036854775807L
# else
# define LONG_MAX 2147483647L
# endif
# define LONG_MIN (-LONG_MAX - 1L)
/* Maximum value an `unsigned long int' can hold. (Minimum is 0.) */
# if __WORDSIZE == 64
# define ULONG_MAX 18446744073709551615UL
# else
# define ULONG_MAX 4294967295UL
# endif
讓我知道是否有人有更好的答案。
只需添加試試 –
short int i = 2147483647; printf(「%d%d%d \ n」,i,i + 1,i + 10); –
int i = 2147483647; printf(「%d%d%d \ n」,i,i + 1,i + 10); –
- 1. int(1)和int(8)有什麼區別?
- 2. void(int)和void(*)(int)有什麼區別?
- 3. int [] x;有什麼區別?和int x [];?
- 4. 使用int [] []和int [,]有什麼區別?
- 5. C中的int * ptr和int * ptr有什麼區別?
- 6. 'int?'有什麼區別和'int'在C#中?
- 7. C中`extern int(x)[]`和`extern int x []`有什麼區別?
- 8. swap(int&a,int&b)和swap(int * a,int * b)。有什麼區別?
- 9. 新的int和new(int)之間的C++有什麼區別?
- 10. 「int * a = new int」和「int * a = new int()」有什麼區別?
- 11. SML中int - > int - > int和(int * int) - > int有什麼區別?
- 12. C++:int * x [5]和int(* x)[5]之間有什麼區別?
- 13. int和long有什麼區別?
- 14. C++中的short和SHORT有什麼區別?
- 15. make([] int,0),[] int {}和* new([] int)有什麼區別?
- 16. long unsigned int和unsigned long int有什麼區別int
- 17. OS X C中int(*)(...)和int(^)(...)的區別?
- 18. phpmyadmin中的int(1)和int(2)有什麼區別
- 19. Java中的public int和int有什麼區別?
- 20. char *和int *的區別是什麼?C++ char * vs int *
- 21. int和char數組有什麼區別?
- 22. operator ++()和operator ++(int)有什麼區別?
- 23. int和NSInteger有什麼區別?
- 24. NSUInteger myID和int myID有什麼區別?
- 25. (int)和intval()之間有什麼區別?
- 26. unsigned short int和unsigned short之間的區別
- 27. 在Scala中Tuple2和(Int,Int)有什麼區別?
- 28. 「long int a = 2」和「int a = 2L」有什麼區別?
- 29. 「const int&jj」和「int&const jj」有什麼區別?
- 30. func foo(arr [] int)int和func foo(arr [num] int)有什麼區別int
在16位的編譯器,它們具有相同的尺寸和範圍。實際上,所有適用於主流平臺的現代編譯器都有'sizeof(int)> sizeof(short)'。 –