c++資料型別
32位windows系統
資料型別 位元組數
bool 1
char 1
short 2
int 4
long 4
long long 8
float 4
double 8
long double 8
指標型別 4
64位windows系統
資料型別 位元組數
bool 1
char 1
short 2
int 4
long 8
long long 8
float 4
double 8
long double 16
指標型別 8
struct型別的大小計算:
struct的大小是最大對齊模數的整數倍。
每種基本資料型別的起始儲存位址都是其位元組大小的整數倍。比如int型別的變數要存放在起始位址是4的整數倍的空間,double型別要存放在起始位址是8的整數倍的空間,指標型別要存放在起始位址是4或8的整數倍的空間。
在struct中,按照每個成員的定義順序分配空間。比如
struct a;
a的最大對齊模數是8,因為double的位元組數是8。所以a的大小應該是8的整數倍。
為a分配空間按照a,b,c,d的順序進行分配。a放在起始位址是4的整數倍的空間,b放在起始位址是1的整數倍的空間,c放在起始位址是4的整數倍的空間,d放在起始位址是8的整數倍的空間。所有的成員放在乙個連續的空間裡,因此,在為a,b分配空間後,為了滿足c的要求,要把b後面的連續三個位元組占用。為a,b,c分配空間後,已經占用了4+1+3+4=12個位元組,起始位址不是8的倍數,要占用c後面的4個位元組,再為d分配空間。因此,a的大小應該是4+1+3+4+4+8=24,24恰好是8的整數倍。
structa中巢狀structb,則structb的最大對其模數不是其大小,而是其成員的最大對齊模數。struct中如果含有陣列,則按單個元素計算,而不是陣列整體。比如
struct b;
struct c;
struct d;
struct e;
structb的最大對齊模數是1,structc的最大對齊模數是8。b的大小是8,c的大小是8。
structd的最大對齊模數是4,structe的最大對齊模數是8。d的大小是16,e的大小是16。
基本資料型別的數值
對於不同的資料型別,它可以表示的數值範圍不同,主要是因為它所占有的位元組數不同。
bool只有true和false兩種,在數值上,0表示false,大於0的數表示true。
signed char:占用乙個位元組,signed表示有符號位,這也是通常預設的char 的型別,signed一般不寫出來。符號位占用最高的一位,0/1表示正數或負數,剩餘7位表示數值的絕對值。signed char的數值範圍是-(27)~27-1;
unsigned 插入:占用乙個位元組,unsigned表示沒有符號位,乙個位元組的8位數都表示數值,範圍是0~2^8;
signed int:占用四個位元組,signed的作用同上,一般的整數也是有符號整數,signed也不寫出來。符號位占用最高的一位,0/1表示正數或負數,剩餘31位表示數值的絕對值。signed int的表示範圍是-(231)~231-1;
unsigned int:占用四個位元組,unsigned表示沒有符號位,四個位元組都表示數值,範圍是0~2^32-1;
signed short:占用兩個位元組,signed表示有符號位,short的預設型別,signed一般不寫,最高位表示正數或負數。數值範圍是-(215)~215-1;
unsigned short:占用兩個位元組,unsigned表示無符號位,兩個位元組都表示數值,範圍是0~2^16-1;
同理signed long的數值範圍是-(231)~231-1,unsigned long的數值範圍是0~2^32-1。
float的數值範圍是±3.4e±38
double的數值範圍是±1.7±3.8
long double的數值範圍是±1.7±4932
原理還在了解中。。。
C中資料型別數值範圍解釋
型別說明符 int 位元組數 4 數的範圍 2 31 2 31 1 型別說明符 unsigned int 位元組數 2 數的範圍 0 2 16 1 0 65535 型別說明符 short int 位元組數 2 數的範圍 2 15 2 15 1 32768 32767 型別說明符 unsigned s...
C中資料型別數值範圍解釋
型別說明符 int 位元組數 4 數的範圍 2 31 2 31 1 型別說明符 unsigned int 位元組數 2 數的範圍 0 2 16 1 0 65535 型別說明符 short int 位元組數 2 數的範圍 2 15 2 15 1 32768 32767 型別說明符 unsigned s...
C中資料型別數值範圍解釋
型別說明符 int 位元組數 4 數的範圍 2 31 2 31 1 型別說明符 unsigned int 位元組數 2 數的範圍 0 2 16 1 0 65535 型別說明符 short int 位元組數 2 數的範圍 2 15 2 15 1 32768 32767 型別說明符 unsigned s...