关于IAR 编译器(MSP430)中数据类型的长度

bandaoyu 2012-05-29 05:38:09
在IA编译器中,输入
float fill_len=0,offest_len=0;
double bb=32767777;
int len=sizeof(bb);
len=sizeof(char);
len=sizeof(int);
len=sizeof(long);
len=sizeof(float);
len=sizeof(bb);
len=sizeof(fill_len);
fill_len=(unsigned int)bb;
len=sizeof(fill_len);

然后载入MSP430 5438单片机,然后执行,得到的结果是:

double bb=32767777;
int len=sizeof(bb); len=4
len=sizeof(char); len=1
len=sizeof(int); len=2
len=sizeof(long); len=4
len=sizeof(float); len=4
len=sizeof(bb); len=4
len=sizeof(fill_len); len=4
fill_len=(unsigned int)bb; len=4
len=sizeof(fill_len); len=4


也就是说,除了char 和int 之外,其他上面的类型 float double long 的长度都是4 为什么??
...全文
3204 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
mapleleafjimmy 2013-09-07
  • 打赏
  • 举报
回复
非常有用的东西!
lr2131 2013-08-01
  • 打赏
  • 举报
回复
这有什么呢,不同的CPU对不同类型的长度定义不同,8位的51要怎么办呢。见多了就没什么奇怪的。
aly丶0-0 2013-07-31
  • 打赏
  • 举报
回复
引用 8 楼 liangchaoxi 的回复:
C与C++中的数据类型长度  一、C   1.几条规则   (1)char类型一般是8bit,但ANSI C里没有硬性规定其长度,某些嵌入式编译器可能是16bit   (2)short和long类型的长度不相同   (3)int类型通常同具体机器的物理字长相同   (4)short通常是16bits, int通常是16bits or 32bits每种编译器可以根据硬件的不同自由确定, 但是short和int必须最少是16bits, 而long类型必须最少是32bits, 并且short必须比int和long类型要短。   2.32位机上类型长度   size of char: 1   size of int: 4   size of long:4   size of float:4   size of long long:8   size of double:8   size of long double:12   size of char * :4   3.64位机上类型长度   size of char:1   size of int:4   size of long :8   size of float :4   size of long long:8   size of double:8   size of long double:16   size of char * :8   4.16位机类型长度   char: 1   int: 2   long:4   unsigned int:2   unsigned short:2   unsigned long:4   float:4   size of char * :4   二、C++   1.字节和字长   字节,八位就是一个字节,是固定概念。字长是指计算机一次能处理的二进制数据的长度,是一个非固定的概念。例如,8位计算机的字长为8,即一个字节, 32位计算机的字长位32,即4个字节,同理,64位计算机的字长为64,即8字节。   2.char类型始终是一个字节长,即8位。   3.int、short int和long int   通常int为一个字长,short为半个字长,long为一个或2个字长(在32位机器中为一个字长)。   4.浮点型float、双精度double、和长双精度long double   典型情况下,float 为一个字,double是两个字,long double为三个或四个字。 原文: http://it.inhe.net/048255/824918271259.shtml 各种数据类型的长度 2012年03月14日 13:30:32 各种数据类型的长度 所有数据类型的变量都在内存中占据一定空间,其长度可使用sizeof来确定。sizeof是一个宏而不是函数(这一点面试经常问到),可用于求某个变量在内存中的长度,也即它所占有的字节数。其使用格式如: 对于变量int a; 可用 sizeof(a);或 sizeof(int); 其它如sizeof(double);等 [例]读取预定义(即由系统本身所定义的)类型数据的长度(这些数据的说明见任何一本C语言的书) // var_size.cpp // To check the sizes of different kinds of variables #include <iostream.h> void main() { cout<<"sizeof(char) :"<<sizeof(char)<<endl; cout<<"sizeof(bool) :"<<sizeof(bool)<<endl; cout<<"sizeof(short) :"<<sizeof(short)<<endl; cout<<"sizeof(int) :"<<sizeof(int)<<endl; cout<<"sizeof(unsigned) :"<<sizeof(unsigned)<<endl; cout<<"sizeof(long) :"<<sizeof(long)<<endl; cout<<"sizeof(float) :"<<sizeof(float)<<endl; cout<<"sizeof(double) :"<<sizeof(double)<<endl; cout<<"sizeof(long double) :"<<sizeof(long double)<<endl; } 此结果在16位机上是不同的(但现已不用16位机,64位的没试过,您可以试试)。 原文: http://page.renren.com/601284443/note/812177271 另可参考:http://blog.sina.com.cn/s/blog_8c612cae01012arj.html http://wenku.baidu.com/view/4c19ccbdc77da26925c5b0e4.html
呵呵,电子可达:同胞
seedundersnow 2013-07-31
  • 打赏
  • 举报
回复
也许对double的支持被关掉了,也许根本就无法支持。。。
liangchaoxi 2012-09-25
  • 打赏
  • 举报
回复
C与C++中的数据类型长度
 一、C
  1.几条规则
  (1)char类型一般是8bit,但ANSI C里没有硬性规定其长度,某些嵌入式编译器可能是16bit
  (2)short和long类型的长度不相同
  (3)int类型通常同具体机器的物理字长相同
  (4)short通常是16bits, int通常是16bits or 32bits每种编译器可以根据硬件的不同自由确定, 但是short和int必须最少是16bits, 而long类型必须最少是32bits, 并且short必须比int和long类型要短。
  2.32位机上类型长度
  size of char: 1
  size of int: 4
  size of long:4
  size of float:4
  size of long long:8
  size of double:8
  size of long double:12
  size of char * :4
  3.64位机上类型长度
  size of char:1
  size of int:4
  size of long :8
  size of float :4
  size of long long:8
  size of double:8
  size of long double:16
  size of char * :8
  4.16位机类型长度
  char: 1
  int: 2
  long:4
  unsigned int:2
  unsigned short:2
  unsigned long:4
  float:4
  size of char * :4
  二、C++
  1.字节和字长
  字节,八位就是一个字节,是固定概念。字长是指计算机一次能处理的二进制数据的长度,是一个非固定的概念。例如,8位计算机的字长为8,即一个字节, 32位计算机的字长位32,即4个字节,同理,64位计算机的字长为64,即8字节。
  2.char类型始终是一个字节长,即8位。
  3.int、short int和long int
  通常int为一个字长,short为半个字长,long为一个或2个字长(在32位机器中为一个字长)。
  4.浮点型float、双精度double、和长双精度long double
  典型情况下,float 为一个字,double是两个字,long double为三个或四个字。
原文: http://it.inhe.net/048255/824918271259.shtml

各种数据类型的长度
2012年03月14日 13:30:32


各种数据类型的长度


所有数据类型的变量都在内存中占据一定空间,其长度可使用sizeof来确定。sizeof是一个宏而不是函数(这一点面试经常问到),可用于求某个变量在内存中的长度,也即它所占有的字节数。其使用格式如:

对于变量int a;

可用

sizeof(a);或

sizeof(int);

其它如sizeof(double);等



[例]读取预定义(即由系统本身所定义的)类型数据的长度(这些数据的说明见任何一本C语言的书)

// var_size.cpp

// To check the sizes of different kinds of variables



#include <iostream.h>

void main()

{

cout<<"sizeof(char) :"<<sizeof(char)<<endl;

cout<<"sizeof(bool) :"<<sizeof(bool)<<endl;

cout<<"sizeof(short) :"<<sizeof(short)<<endl;

cout<<"sizeof(int) :"<<sizeof(int)<<endl;

cout<<"sizeof(unsigned) :"<<sizeof(unsigned)<<endl;

cout<<"sizeof(long) :"<<sizeof(long)<<endl;

cout<<"sizeof(float) :"<<sizeof(float)<<endl;

cout<<"sizeof(double) :"<<sizeof(double)<<endl;

cout<<"sizeof(long double) :"<<sizeof(long double)<<endl;

}





此结果在16位机上是不同的(但现已不用16位机,64位的没试过,您可以试试)。


原文: http://page.renren.com/601284443/note/812177271
另可参考:http://blog.sina.com.cn/s/blog_8c612cae01012arj.html
http://wenku.baidu.com/view/4c19ccbdc77da26925c5b0e4.html
bandaoyu 2012-09-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

引用 2 楼 的回复:

引用 1 楼 的回复:
这个好像没有大概为什么

只要知道,并遵守这个规则即可
double 和long 的长度怎么会才4个字节呢??


标准是死的,到具体平台后,会有相应的修改

比如在32位平台,那int就变成了32位的

这个真的没必要去知道为什么,遵守,当然,如果到你自己去设计并实现一个平台的时候,你才要去考虑相关标准与你具体平台……
[/Quote]可是我编程的时候需要知道数据的长度,这个时候怎么办?
dceacho 2012-09-04
  • 打赏
  • 举报
回复

为什么double会是4字节我也不知道,
但long和float是的确是4字节的,我用keil编译时不管是51还是ARM都是字节的,而且我记得C的基本教程里也说这2个是4字节的

如果只是写代码确定位数,应该是有数据定义其他形式
例如我现在用的是keil
但<stdint.h>文件中typedef了int32_t 和int16_t
所以写代码时就用stdint.h中的定义申明变量的话就可以确定位数了

至于stdint.h文件中没有的像double你sizeof一下记住长度就行了,反正IAR只要没BUG是不会去修改数据类型的长度
lbing7 2012-05-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

引用 1 楼 的回复:
这个好像没有大概为什么

只要知道,并遵守这个规则即可
double 和long 的长度怎么会才4个字节呢??
[/Quote]

标准是死的,到具体平台后,会有相应的修改

比如在32位平台,那int就变成了32位的

这个真的没必要去知道为什么,遵守,当然,如果到你自己去设计并实现一个平台的时候,你才要去考虑相关标准与你具体平台性能等方面的权衡
bandaoyu 2012-05-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
这个好像没有大概为什么

只要知道,并遵守这个规则即可
[/Quote] double 和long 的长度怎么会才4个字节呢??
lbing7 2012-05-29
  • 打赏
  • 举报
回复
这个好像没有大概为什么

只要知道,并遵守这个规则即可

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧