c 資料型別大小及數值範圍

2021-09-12 10:09:53 字數 2032 閱讀 5187

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...