int類型比較特殊,具體的字節數同機器字長和編譯器有關。如果要保證移植性,盡量用__int16 __int32 __int64吧
__int16、__int32這種數據類型在所有平臺下都分配相同的字節。所以在移植上不存在問題。
所謂的不可移植是指:在一個平臺上編寫的代碼無法拿到另一個平臺上運行時,不能達到期望的運行結果。
例如:在32為平臺上(所謂32位平臺是指通用寄存器的數據寬度是32)編寫代碼,int 類型分配4個字節,而在16位平臺是則分配2個字節,那么在16位上編譯出來的exe,
其中是為int分配2字節,而在32位平臺上運行時,會按照4個字節來解析,顯然會出錯誤的!!
而對于非int行,目前為止,所有的類型分配的字節數都是兼容的,即不同平臺對于同一個類型分配相同的字節數!!
建議:在代碼中盡量避免使用int類型,根據不同的需要可以用short,long,unsigned int 等代替。
下面是各個類型一覽表【轉】
__int16、__int32這種數據類型在所有平臺下都分配相同的字節。所以在移植上不存在問題。
所謂的不可移植是指:在一個平臺上編寫的代碼無法拿到另一個平臺上運行時,不能達到期望的運行結果。
例如:在32為平臺上(所謂32位平臺是指通用寄存器的數據寬度是32)編寫代碼,int 類型分配4個字節,而在16位平臺是則分配2個字節,那么在16位上編譯出來的exe,
其中是為int分配2字節,而在32位平臺上運行時,會按照4個字節來解析,顯然會出錯誤的!!
而對于非int行,目前為止,所有的類型分配的字節數都是兼容的,即不同平臺對于同一個類型分配相同的字節數!!
建議:在代碼中盡量避免使用int類型,根據不同的需要可以用short,long,unsigned int 等代替。
下面是各個類型一覽表【轉】
64位指的是cpu通用寄存器的數據寬度是64位的。
| 數據類型名稱 | 字節數 | 別名 | 取值范圍 |
| int | * | signed,signed int | 由操作系統決定,即與操作系統的"字長"有關 |
| unsigned int | * | unsigned | 由操作系統決定,即與操作系統的"字長"有關 |
| __int8 | 1 | char,signed char | –128 到 127 |
| __int16 | 2 | short,short int,signed short int | –32,768 到 32,767 |
| __int32 | 4 | signed,signed int | –2,147,483,648 到 2,147,483,647 |
| __int64 | 8 | 無 | –9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
| bool | 1 | 無 | false 或 true |
| char | 1 | signed char | –128 到 127 |
| unsigned char | 1 | 無 | 0 到 255 |
| short | 2 | short int,signed short int | –32,768 到 32,767 |
| unsigned short | 2 | unsigned short int | 0 到 65,535 |
| long | 4 | long int,signed long int | –2,147,483,648 到 2,147,483,647 |
| long long | 8 | none (but equivalent to __int64) | –9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
| unsigned long | 4 | unsigned long int | 0 到 4,294,967,295 |
| enum | * | 無 | 由操作系統決定,即與操作系統的"字長"有關 |
| float | 4 | 無 | 3.4E +/- 38 (7 digits) |
| double | 8 | 無 | 1.7E +/- 308 (15 digits) |
| long double | 8 | 無 | 1.7E +/- 308 (15 digits) |
| wchar_t | 2 | __wchar_t | 0 到 65,535 |
| 類型標識符 | 類型說明 | 長度 (字節) | 范圍 | 備注 |
| char | 字符型 | 1 | -128 ~ 127 | -27 ~ (27 -1) |
| unsigned char | 無符字符型 | 1 | 0 ~ 255 | 0 ~ (28 -1) |
| short int | 短整型 | 2 | -32768 ~ 32767 | 2-15 ~ (215 - 1) |
| unsigned short int | 無符短整型 | 2 | 0 ~ 65535 | 0 ~ (216 - 1) |
| int | 整型 | 4 | -2147483648 ~ 2147483647 | -231 ~ (231 - 1) |
| unsigned int | 無符整型 | 4 | 0 ~ 4294967295 | 0 ~ (232-1) |
| float | 實型(單精度) | 4 | 1.18*10-38 ~ 3.40*1038 | 7位有效位 |
| double | 實型(雙精度) | 8 | 2.23*10-308 ~ 1.79*10308 | 15位有效位 |
| long double | 實型(長雙精度) | 10 | 3.37*10-4932 ~ 1.18*104932 | 19位有效位 |

影響中16位平臺,多用C來開來,多是嵌入式開發.
32、64位在PC、服務器級較多,目前16位已很少.
我個人認為int型相于對long類型要安全.
long類型在windows-64下,仍是32字節;
但在LINUX-64下long和指針是相當的,已升級到了64字節,
如果結構體中使用long,結果大小有變,windows64下做的資源在linux下64處理,會有問題,
最常見的資源頭大小就一致.
如果是大型項目,還是建立自己的一套低層基本數據類型封裝方為上策.