C C 中各型別資料所佔位元組數

2021-07-30 01:56:16 字數 1614 閱讀 1603

ref:和機器字長及編譯器有關係

所以,int,long int,short int的寬度都可能隨編譯器而異。但有幾條鐵定的原則(ansi/iso制訂的):

1. sizeof(short int)<=sizeof(int)

2. sizeof(int)<=sizeof(long int)

3. short int至少應為16位(2位元組)

4. long int至少應為32位。 unsigned 是無符號的意思。

例如:16位編譯器

char :1個位元組

char*(即指標變數): 2個位元組short int : 2個位元組

int: 2個位元組unsigned int : 2個位元組

float: 4個位元組

double: 8個位元組

long: 4個位元組

long long: 8個位元組

unsigned long: 4個位元組

32位編譯器

char :1個位元組

char*(即指標變數): 4個位元組(32位的定址空間是2^32, 即32個bit,也就是4個位元組。同理64位編譯器)

short int : 2個位元組

int: 4個位元組unsigned int : 4個位元組

float: 4個位元組

double: 8個位元組

long: 4個位元組long long: 8個位元組

unsigned long: 4個位元組

64位編譯器

char :1個位元組

char*(即指標變數): 8個位元組short int : 2個位元組

int: 4個位元組unsigned int : 4個位元組

float: 4個位元組

double: 8個位元組

long: 8個位元組

long long: 8個位元組

unsigned long: 8個位元組

總結:不同位數的編譯器指標變數的位元組數不同,指標變數即位址,亦即定址空間,等於2^編譯器位數。

以我的64位電腦為例,編譯器vs2013預設是32位編譯器,但通過設定也可以生成64位的程式。

#include using namespace std;

int main(void)

當設定為win32時,輸出為4 4,但設定為4 8。設定如下:

C語言各型別所佔位元組數

1 struct結構體變數大小等於結構體中的各個成員變數所佔記憶體大小總和,union共用體變數大小等於共用體結構中占用記憶體最大的成員的記憶體大小 聯合體中占用記憶體空間最大的字段加上填充位元組 對齊位元組後所需位元組數 2 列舉型別,指乙個被命名的整型常數的集合。即列舉型別,本質上是一組常數的集...

資料型別所佔位元組數

一 32位平台 分為有符號型與無符號型。有符號型 short 在記憶體中佔兩個位元組,範圍為 2 15 2 15 1 int 在記憶體中佔四個位元組,範圍為 2 31 2 31 1 long在記憶體中佔四個位元組,範圍為 2 31 2 31 1 無符號型 最高位不表示符號位 unsigned sho...

C C 基本資料型別所佔位元組數

關於這個基本的問題,很早以前就很清楚了,c標準中並沒有具體給出規定那個基本型別應該是多少位元組數,而且這個也與機器 os 編譯器有關,比如同樣是在32bits的作業系統系,vc 的編譯器下int型別為佔4個位元組 而tuborc下則是2個位元組。所以int,long int,short int的寬度...