我發現這個問題的答案不盡相同,我知道必須有一個確定的答案。 C中四種主要數據類型的最小分配內存大小是多少? int
,double
,float
和char
是我想到的。 signed
或unsigned
類型是否以任何方式更改大小?C數據類型的最小保證大小/範圍
回答
您可以使用sizeof(variable)
:
舉個例子我的本地機器上運行此:
sizeof (char) = 1
sizeof (double) = 8
sizeof (float) = 4
sizeof (int) = 4
sizeof (long) = 4
sizeof (long long) = 8
sizeof (short) = 2
sizeof (void *) = 4
注意:你得到的值可以通過OS /編譯器/ CPU架構來決定。
尺寸是特定於平臺和編譯器的尺寸。 – 2013-02-11 15:27:39
@Toon - 是的,他仍然可以使用sizeof運算符來確定他們自己。 – 2013-02-11 15:29:45
是的,sizeof是安全的。但固定值可能會令人困惑。 – 2013-02-11 15:30:37
只有char
保證是1
字節的標準。
其他類型具有實現定義的大小。
的確,但請注意,1個字節可能不是八位字節。有些平臺的字節寬度爲32位。 – 2013-02-11 16:12:51
收件一點測試程序,並看到自己:
int main(int argc, char* argv[])
{
printf("%d\n", sizeof(char));
printf("%d\n", sizeof(int));
printf("%d\n", sizeof(unsigned char));
printf("%d\n", sizeof(unsigned int));
printf("%d\n", sizeof(double));
printf("%d\n", sizeof(float));
return 0;
}
「整數,浮點,雙」 是平臺相關的(16,32,64)。符號不會影響大小,只能解釋。
'%zu',而不是'%d'。 'sizeof'返回'size_t',而不是'int'。 – 2013-02-11 15:32:13
重要的是要注意,結果會根據您編譯的平臺而有所不同。我建議你把這個添加到你的答案中,Leor。 – junix 2013-02-11 16:51:16
簽名或無符號類型是否以任何方式更改大小?
不,它隻影響保存的數據範圍。有關短數據類型(2個字節),請參見下面的示例。
- 簽署-32,768到+32,767
- 無符號的0到65,535
這是一個很大的問題。我把你引用到C99 6.2.5。而文章Wikipedia C data types沒問題。
- char大到足以存儲基本執行字符集的任何成員。它不是一個字節(由8位定義),考慮它的一個好方法是它是最小的可尋址/可分配單元(MAU),就象你在你的問題中寫的一樣,但在某些系統上不是一個字節。
- 整數是有趣的。我認爲他們應該至少保持2^15-1(16比特),但目前我在C99中找不到它。在標準的新版本中,我相信它們實際上被定義爲至少32位,因爲很多人都認爲它們是。但總的來說,您必須假設它們是按照MAU(
sizeof()
)定義的實現。不僅如此,規範還允許填充位(例如用於糾錯)。因此,在8位字符系統中,如果sizeof(int)
爲4,則最大整數不一定是2^31-1,因爲規範允許將某些位用作「填充」。因此唯一可以確定的方法是使用limits.h
! float/double也是實現定義的,儘管double總是大於float。通常這些由實現定義爲與IEEE-754規範兼容(它們分別需要最少32位和64位),但C99不需要它。但是如果你的char大小是32位,那麼sizeof(float)可能只有1。
signed/unsigned不改變大小。
由於這些原因,<stdint.h>
是C語言中最重要的新增功能之一。在此之前,編寫跨平臺代碼非常困難。
ANSI C爲各種基本數據類型定義了以下尺寸。
- 炭
- 最小的帶符號範圍:-128 .. 127
- 最小無符號範圍:0..255
- 可以較大,但無論大小,的sizeof(char)的== 1
- 的sizeof(無符號字符)== 1
- 短
- 最小的帶符號範圍:-32768 .. 32767
- 最小無符號範圍:0 .. 65535
- 可以更大
- 長
- 最小的帶符號範圍:-2147483648 2147483647 ..
- 最小無符號範圍:0 .. 4294967295
- 可以更大
- INT
- 必須有,在miminum,相同的範圍爲短
- 可以有相同的範圍作爲長
- 不能有一個範圍比長
- 短< = INT更大,並且詮釋< =長,但短<長
有一堆對浮點型和雙多個規則,但一般地,浮體的範圍是< =一個double的範圍(對於現代機器--- float是4個字節,double是8)。
- 1. Linux上的C++數據類型大小/範圍顯示
- 2. 值的範圍取決於數據類型的大小?
- 3. 對最小和最大範圍的輸入類型編號進行驗證
- 4. famo.us輸入表面類型範圍最小/最大屬性
- 5. C中數據類型的最小值和最大值
- 6. mvc4範圍驗證小數
- 7. 範圍最小/最大查詢
- 8. Java:最小和最大日期範圍
- 9. 驗證範圍,其中最小=最大的jQuery滑塊
- 10. C# - 類型大小
- 11. 是否可以創建具有最小和最大範圍的浮點類型?
- 12. CSS3背景大小 - 我可以保證覆蓋範圍嗎?
- 13. 如何允許輸入類型編號在最小和最大範圍之外
- 14. 數據庫數據類型大小
- 15. 返回最大價值混合數據類型的範圍
- 16. Java中的最大數據類型範圍值
- 17. 減少數據類型大小會導致索引超過最大大小?
- 18. CIImage大小範圍零?
- 19. 範圍最小值查詢
- 20. 最小範圍3套
- 21. 如何增加HTML5輸入類型的長度/大小範圍
- 22. Elasticsearch:如何根據最大/最小值的數組得分範圍查詢
- 23. OSX和iOS數據類型的大小
- 24. zlib壓縮的最小數據大小?
- 25. 選擇最合適的整數大小/範圍用於變量
- 26. 查找範圍中包含的最大子樹的大小
- 27. 無功變化最小/最大範圍+ 2個數據幀閃亮
- 28. MySQL - 如何通過字符範圍(最小到最大)選擇數據
- 29. 在最小和最大範圍表中查找值的位置
- 30. Android是什麼加速度計的最小和最大範圍
sizeof(variable); – 2013-02-11 15:24:55
這個問題不是重複的原因,應該重新打開。 – 2013-02-11 15:39:06
@Steven:http://en.wikipedia.org/wiki/C_data_types似乎有你所尋求的信息。 – 2013-02-11 15:40:56