int 這個資料型別比較特殊,具體分配的位元組數與機器字長和編譯器有關。如果要保證移植性,盡量用__int16 __int32 __int64 ,__int16、__int32,_int64 這些資料型別在所有平台下都分配相同的位元組。所以在移植上不存在問題。
所謂的不可移植是指:在乙個平台上編寫的**無法拿到另乙個平台上執行時,不能達到期望的執行結果
。
例如:在32為平台上(所謂32位平台是指通用暫存器的 資料寬度是32)編寫**,int 型別分配4個位元組,而在16位平台是則分配2個位元組,那麼在16位上編譯出來的exe,其中是為int分配2位元組,而在32位平台上執行時,會按照4個字 節來解析,顯然會出錯誤的!!
而對於非int型別,目前為止,所有的型別分配的位元組數都是相容的,即不同平台對於同乙個型別分配相同的位元組數!!
建議:在**中盡量避免使用int型別,根據不同的需要可以用short,long等代替。
下表是關於常見資料型別位元組長度的總結
資料型別名稱
位元組數別名
取值範圍
int*
signed,signed int
由作業系統
決定,即與作業系統的"字長"有關
unsigned int
*unsigned
由作業系統決定,即與作業系統的"字長"有關
__int8
1char,signed char
–128 ~ 127
__int16
2short,short int,signed short int
–32,768 ~ 32,767
__int32
4signed,signed int
–2,147,483,648 ~ 2,147,483,647
__int648無
–9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
bool1無
false 或 true
char
1signed char
–128 到 127
unsigned char1無
0 到 255
short
2short int,signed short int
–32,768 到 32,767
unsigned short
2unsigned short int
0 到 65,535
c語言中char型別轉int型別
剛才做北郵2010年網研上機題的時候,遇到了char型和int型相互轉化的問題,這裡進行一下總結。今後,可能會多次更新部落格,因為半年做了很多總結,但是都是儲存在word文件上了,現在開始慢慢向csdn部落格轉移。1 char型數字轉換為int型,例如 char a 123 printf d n a...
c語言資料型別位元組長度
short與long兩個限定符的引入可以為我們提供滿足實際需要的不同長度的整形數。int通常代表特定機器中證書的自然長度。short型別通常為16位,long型別通常為32位,int型別可以為16位或32位。各編譯器可以根據硬體特性自主選擇合適的型別長度,但要遵循下列限制 short與int型別至少...
C語言中結構體資料位元組長度問題
在複習c語言中結構體時,遇到如下問題。定義結構體 typedef struct studentstudent int main 試著去計算結構所佔記憶體空間的大小 在32位作業系統中,int 所佔4個位元組,char佔乙個位元組,那麼結構體中所佔資料位元組不應該是6個位元組大小嗎。因為在計算機中是按...