一、前言
關於這個話題討論的很多,觀點也很多,但是我認爲數據類型的大小和編譯器直接相關。另外附上一個網友的回帖:
不要迷信書、考題、老師、回帖;
要迷信CPU、編譯器、調試器、運行結果。
並請結合“盲人摸太陽”和“駕船出海時一定只帶一個指南針。”加以理解。
任何理論、權威、傳說、真理、標準、解釋、想象、知識……都比不上擺在眼前的事實!
關於cpu和操作系統的參見以博客:
https://blog.csdn.net/wwwlyj123321/article/details/99940786
二、結論
數據類型(如int、short int、long、float等)只是語言定義裏面的一個關鍵字,只對compiler可見,complier說它是幾位就是幾位,和os/cpu都沒關係。這也就是爲什麼很多程序不用int,short,long,而是自己定義int32_t, int16_t, uint32_t, ...,以後不管cpu/compiler怎麼變,它只需要改改自己的typedef。
另外,確定一個數據類型所佔空間的最好的方式是使用sizeof!
NOTE:
編譯器的作用是根據目標硬件(即CPU)的特性將源程序編譯爲可在該硬件上運行的目標文件。如果一個編譯器支持某32位的CPU,那麼它就可以將源程序編譯爲可以在該CPU上運行的目標文件。
以下爲轉載,未做驗證:
以char, short, int, long爲例:
16位編譯器:(Turbo C/Turbo C++)
sizeof(char) = 1
sizeof(short) = 2
sizeof(float) = 4
sizeof(double) = 8
sizeof(int) = 2
sizeof(long) = 4
sizeof(long double) = 16
sizeof(void *) = 4
32位編譯器:(Visual Studio C++)
sizeof(char) = 1
sizeof(short) = 2
sizeof(float) = 4
sizeof(double) = 8
sizeof(int) = 4
sizeof(long) = 4
sizeof(long long) = 8
sizeof(void *) = 4 (表示指針類型數據長度)
64位編譯器:
sizeof(char) = 1
sizeof(short) = 2
sizeof(float) = 4
sizeof(double) = 8
sizeof(int) = 4
sizeof(long) = 8
sizeof(long long) = 8
sizeof(void *) = 8
REF:
https://blog.csdn.net/bi_mang/article/details/51824290