zoukankan      html  css  js  c++  java
  • keil_4/MDK各种数据类型占用的字节数

     

    笔者正在学习uCOS-II,移植到ARM时考虑到数据类型的定义,但对于Keil MDK编译器的数据类型定义还是很模糊,主要就是区分不了short intintlong 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---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的最大值

    255

    0xFF

    CHAR_MIN

    char的最小值

    0

    0x00

    SCHAR_MAX

    signed char的最大值

    127

    0x7F

    SCHAR_MIN

    signed char的最小值

    –128

    0x80

    UCHAR_MAX

    unsigned char的最大值

    255

    0xFF

    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{  unsinged int *a;

                      unsigned int *b;

                      unsigned int  c;

                     unsigend  int d;           

                };  struct link  link1;

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

          uint  *g= *f+1);// **g=link1->b

     成员变量偏移计算注意:得到一个成员函数的内存地址,步进决定于运算成员的数据类型,如(g=f+11表示一个单位int长度,uint 2字节),这个最终得参考内存对齐原理,对齐了肯定遵从上规则

       2 所取的内存运算后的地址赋值给gg的类型必须跟原基地址(原成员)的一致。 否则,运算出错

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    ANDROID BINDER机制浅析
    ANDROID权限机制
    运算符
    Give root password for maintenance
    安装python工具
    gitlab
    jumpserver
    python环境安装
    inode
    升级openssh漏洞
  • 原文地址:https://www.cnblogs.com/Ph-one/p/4001314.html
Copyright © 2011-2022 走看看