出處:http://blog.sina.com.cn/s/blog_62d3426b0100fr7q.html
對于Keil MDK編譯器的資料類型定義還是很模糊,主要就是區分不了short int、int、long 和long int占用多少位元組。為了得到一個權威的答案,改用編譯器自身得出。
一、先定義幾個變量,用于存放各資料類型的位元組數。
//#include<LPC214x.H>
#include<stdio.h>
unsigned char a,b,c,d,e,f,g;
main()
{
a=sizeof(char);
b=sizeof(short int);
c=sizeof(int);
d=sizeof(long);
e=sizeof(long int);
f=sizeof(float);
g=sizeof(double);
while(1);
}
二、檢視各變量的存放位址。View---Symbols Window。
三、檢視各位址存放的值。View---memory Window。
得出:
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位長度)