keil 4 MDK各種資料型別占用的位元組數

2021-09-06 18:28:57 字數 2956 閱讀 7902

筆者正在學習ucos-ii

,移植到

arm時考慮到資料型別的定義,但對於

keil mdk

編譯器的資料型別定義還是很模糊,主要就是區分不了

short int

、int

、long 

和long int

占用多少位元組。為了得到乙個權威的答案,改用編譯器自身得出。

一、先定義幾個變數,用於存放各資料型別的位元組數。

//#include

#include

unsigned char a,b,c,d,e,f,g;

main()

三、檢視各位址存放的值。view---memory window。

由上圖可知得出:

指標型別

*  統一為4位元組

char占用

1個位元組

short int占用2位元組

int占用4位元組

long占用4位元組

long int占用4位元組

float占用4位元組

double占用8位元組

我們即可這樣定義巨集:

typedef unsigned char    uint8;      // 無符號

8位整型變數 

typedef signed   char    int8;       // 

有符號8

位整型變數 

typedef unsigned short   uint16;     // 

無符號16

位整型變數 

typedef signed   short   int16;      // 

有符號16

位整型變數 

typedef unsigned int     uint32;     // 

無符號32

位整型變數 

typedef signed   int     int32;      // 

有符號32

位整型變數 

typedef float            fp32;       // 

單精度浮點數(

32位長度) 

typedef double           fp64;       // 

雙精度浮點數(

64位長度)

②檢視各變數的存放位址。

view---symbols window

。 下面是

real view

官方文件的說明:

常數意義

值十六進製制值

char_max

char的最大值

2550xff

char_min

char的最小值 0

0x00

schar_max

signed char的最大值

1270x7f

schar_min

signed char的最小值

–128

0x80

uchar_max

unsigned char的最大值

2550xff

shrt_max

short的最大值

32 767

0x7fff

shrt_min

short的最小值

–32 768

0x8000

ushrt_max

unsigned short的最大值

65 535

0xffff

int_max

int的最大值

2 147 483 647

0x7fffffff

int_min

int的最小值

–2 147 483 648

0x80000000

long_max

long的最大值

2 147 483 647

0x7fffffff

long_min

long的最小值

–2 147 483 648

0x80000000

ulong_max

unsigned long的最大值

4 294 967 295

0xffffffff

llong_max

long long的最大值

9.2e+18

0x7fffffff ffffffff

llong_min

long long的最小值

–9.2e+18

0x80000000 00000000

ullong_max

unsigned long long的最大值

1.8e+19

0xffffffff ffffffff

附加:四:

結構體成員引用,往往通過記憶體偏移計算,引用另外成員變數。這時需注意的有:

eg:sturct  link;  struct link  link1;

unsigned int e=link1->c;     uint *  f=   &link->a;  

uint  *g= *(

f+1);

// **g=link1->b

成員變數偏移計算注意:

1 得到乙個成員函式的記憶體位址,步進決定於運算成員的資料型別,如(

g=f+1,1

表示乙個單位

int長度,

uint 佔2

位元組),

這個最終得參考記憶體對齊原理,對齊了肯定遵從上規則

2 所取的記憶體運算後的位址賦值給g,

g的型別必須跟原基位址(原成員)的一致。

否則,運算出錯

keil 4 MDK各種資料型別占用的位元組數

筆者正在學習ucos ii 移植到 arm時考慮到資料型別的定義,但對於 keil mdk 編譯器的資料型別定義還是很模糊,主要就是區分不了 short int int long 和long int 占用多少位元組。為了得到乙個權威的答案,改用編譯器自身得出。一 先定義幾個變數,用於存放各資料型別的...

各種資料型別OuO

char 1 個位元組 128 到 127 或者 0 到 255 unsigned char 1 個位元組 0 到 255 signed char 1 個位元組 128 到 127 int4 個位元組 2147483648 到 2147483647 unsigned int 4 個位元組 0 到 4...

Qt 各種資料型別轉換

1 qstring string qstring.tostdstring 2 string qstring qstring fromstdstring string 3 qstring int,double,char qstring toint qstring todouble qstring.to...