笔者正在学习uCOS-II,移植到ARM时考虑到数据类型的定义,但对于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---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

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

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

keil_4/MDK各种数据类型占用的字节数的更多相关文章

  1. c# 数据类型占用的字节数

    最近一直在使用C#中的关于各种数据类型转化为字节或者字节转化为各种数据类型进行数据解析.但是在此之前必须知道各种数据类型在字节中占的字节数. 所以在此归总. bool -> System.Boo ...

  2. [转] c# 数据类型占用的字节数

    http://www.cnblogs.com/laozuan/archive/2012/04/24/2467888.html

  3. Java各种类型占用的字节数

    Java 占用字节数 转自:http://www.blogjava.net/stevenjohn/archive/2013/10/18/405416.html 数据类型 大小(二进制位数) 范围 默认 ...

  4. JAVA基本数据类型所占字节数是多少?

    byte     1字节                short    2字节                int      4字节                long     8字节     ...

  5. java基本数据类型所占字节数

    JAVA基本数据类型所占字节数是多少?(32位系统) byte     1字节                short    2字节                int      4字节      ...

  6. 10055 - Hashmat the Brave Warrior & 各数据类型所占字节数 (C语言)

    Problem A Hashmat the brave warrior Input: standard input Output: standard output Hashmat is a brave ...

  7. 编码占用的字节数 1 byte 8 bit 1 sh 1 bit 中文字符编码 2. 字符与编码在程序中的实现 变长编码 Unicode UTF-8 转换 在网络上传输 保存到磁盘上 bytes

    小结: 1.UNICODE 字符集编码的标准有很多种,比如:UTF-8, UTF-7, UTF-16, UnicodeLittle, UnicodeBig 等: 2 服务器->网页 utf-8 ...

  8. 转:C/C++基本数据类型所占字节数

    参考:http://blog.csdn.net/vast_sea/article/details/8076934 关于这个基本的问题,很早以前就很清楚了,C标准中并没有具体给出规定那个基本类型应该是多 ...

  9. C/C++基本数据类型所占字节数

    关于这个主要的问题,非常早曾经就非常清楚了,C标准中并没有详细给出规定那个基本类型应该是多少字节数,并且这个也与机器.OS.编译器有关,比方相同是在32bits的操作系统系,VC++的编译器下int类 ...

随机推荐

  1. Python:正则表达式的一些例子

    #匹配电话号码(前面3/4-后面7-8): '\d{3,4}-\d{7,8}' #匹配QQ号(从号码1000开始第一位不能为0): '[1,9][0,9]{4}' #匹配身份证(15位数或者18位,考 ...

  2. vue - vue-cli脚手架项目中组件的使用

    在webpack-simple模板中,包括webpck模板.一个.vue文件就是一个组件. 为什么会这样呢?因为webpack干活了!webpack的将我们所有的资源文件进行打包.同时webpack还 ...

  3. 2018/04/17 每日一个Linux命令 之 tar

    10天没有更新这个每日学习 linux 了,因为实在很忙,晚上还要看会其他知识. 但是也不应该给自己找理由,还是应该每天的坚持下去 -- tar 用于在 linux 解压缩/文件 这个命令下面的参数非 ...

  4. linux桌面与命令模式切换

    在图形下面按Ctrl+alt+F1(F2\F3\F4)进入命令模式 在命令模式下,按Ctrl+alt+F7回到图形,或登录用户输入startx进入图形!

  5. 迁移到 Linux :入门介绍 | Linux 中国

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/F8qG7f9YD02Pe/article/details/79001952 这个新文章系列将帮你从其 ...

  6. Unity 补充安装

    当需要下载 安装Unity之时没勾选的一些组件时, 1.去Unity官网点开Unity旧版本 2.找到你的Unity版本,然后只要下载Unity安装程序 3.点开安装程序,去掉已安装组件的勾选,勾选你 ...

  7. PHP解决搜索时在URL地址栏输入中文字符搜索结果出现乱码

    这 个问题的出现的前提是本站代码采用utf-8格式,php空间当页面停留在搜索页面时,在浏览器的地址栏输入中文的关键字进行搜索时会出现乱码,在网上查找资料说 明,是因为浏览器默认将url中的中文字符编 ...

  8. 使用LinkedList模拟栈数据结构的集合

    封装MyStack类 public class MyStack { private LinkedList link; //调用MyStack创建对象的时候其实是调用的LinkedList创建的是Lin ...

  9. [LeetCode] 458. Poor Pigs_Easy tag: Math

    There are 1000 buckets, one and only one of them contains poison, the rest are filled with water. Th ...

  10. iOS开发--图片轮播

    直接上代码了,比较简单.演示下载地址:Demo // // UYViewController.m // 图片轮播器 // // Created by jiangys on 15/5/23. // Co ...