8\16\32位单片机中数据类型(int等)占的位数问题

huayangshiboqi 2017-12-10 11:59:34
如题,怎样确定不同位数单片机的不同数据类型所占位数问题,和数据类型int,uint,short,long,char,uchar,所占长度和什么有关,怎样测试。
之前对Int的了解就是C语言书上的,一个int占4个字节,但是,在调试16位MSP430F5529单片机时,发现对int型数据i=25553做累加操作时,会出现问题,好像发生了溢出错误,之后把i重新赋值改为i=249之后恢复正常。
所以想问一下在不同类型的单片机,不同位数不同硬件上的单片机,int等数据类型怎样查看,怎样测试。
...全文
6371 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
无心的世界 2017-12-12
  • 打赏
  • 举报
回复
在调试模式下看看呗!
huayangshiboqi 2017-12-12
  • 打赏
  • 举报
回复
引用 17 楼 worldy 的回复:
汇编编程你要知道,C编程可以按编译器的说明做即可,做为编译器,对于合法的代码,它会帮你编译为合适的代码。但是,如果你对芯片的结构和特性掌握的越多,有助于你对特定问题的的处理。
好吧
worldy 2017-12-12
  • 打赏
  • 举报
回复
汇编编程你要知道,C编程可以按编译器的说明做即可,做为编译器,对于合法的代码,它会帮你编译为合适的代码。但是,如果你对芯片的结构和特性掌握的越多,有助于你对特定问题的的处理。
huayangshiboqi 2017-12-12
  • 打赏
  • 举报
回复
我们要注意的就是在这个编译器编译的时候是否有问题有好了?
huayangshiboqi 2017-12-12
  • 打赏
  • 举报
回复
引用 13 楼 worldy 的回复:
需要了解,编译器的帮助文档或者手册
这么说我们用C语言编写程序的时候,根本不需要管目标单片机到底能不能处理这么长的数据,编译器会自动解决吗。
huayangshiboqi 2017-12-12
  • 打赏
  • 举报
回复
引用 11 楼 weixin_34137918 的回复:
在调试模式下看看呗!
调试模式下看什么?如果不同编译器数据类型长度不一样,那么,怎么判断它的数据是否溢出呢,即1、在用一款编译器前,应该怎样查看它的数据类型长度,2、好像有一个头文件是stdint.h,这个是用来限定数据类型长度的,3、有人说自己在程序中规定想要的数据类型长度,这个又怎么操作呢
worldy 2017-12-12
  • 打赏
  • 举报
回复
需要了解,编译器的帮助文档或者手册
huayangshiboqi 2017-12-12
  • 打赏
  • 举报
回复
引用 10 楼 worldy 的回复:
keilc 的int应该是2字节,但是51单片机是8位机,在编译的时候,keilc会生成一段程序模拟16位的运算
如果每一个编译器数据类型长度不一样,岂不是数据是否溢出这种问题都变的模糊了吗,在编译器下编写程序时,岂不是还要看一下编译器中数据类型的长度,1、需不需要,2、在哪可以查看呢
zgl7903 2017-12-11
  • 打赏
  • 举报
回复
int IEEE 没有明确是多少位, 在不同的编译器中不一样, 按数据范围 用 short 和 long 这是明确的长度
worldy 2017-12-11
  • 打赏
  • 举报
回复 1
keilc 的int应该是2字节,但是51单片机是8位机,在编译的时候,keilc会生成一段程序模拟16位的运算
huayangshiboqi 2017-12-11
  • 打赏
  • 举报
回复
引用 7 楼 zgl7903 的回复:
int IEEE 没有明确是多少位, 在不同的编译器中不一样, 按数据范围 用 short 和 long 这是明确的长度
引用 8 楼 worldy 的回复:
不同的编译器对应的字节数不同,简单的测试一下,就知道了
嗯,我现在知道和具体的字节数和编译器有关,那么,问一下另一个问题。 比如,我在keil中写程序,int是4字节,但是,51单片机只能处理int 为2个字节的数据,那么这个转换是编译器编译链接时,按照目标单片机的处理能力自动转换吗?
worldy 2017-12-11
  • 打赏
  • 举报
回复
不同的编译器对应的字节数不同,简单的测试一下,就知道了
das白 2017-12-10
  • 打赏
  • 举报
回复
和哪个cpu有关 看你的程序运行在什么上了 你编51程序当然和51的cpu有关
das白 2017-12-10
  • 打赏
  • 举报
回复
别想太多了 没啥意思 不管是单片机 还是电脑 它们都有cpu 你可以理解电脑不过是集成度高的单片机 至于cpu的位数 就是一次可以计算的二进制的个数 建议去了解微机原理和汇编语言 int几个字节不重要 想不起来sizeof一下就可以 编译器会编译出机器可以识别的语言 不用你操心 你只需要会用 有兴趣可以学编译原理 况且单片机是8位的 那么一般都用char 占内存少 运算速度快
huayangshiboqi 2017-12-10
  • 打赏
  • 举报
回复
引用 3 楼 qq_38204686 的回复:
[quote=引用 2 楼 huayangshiboqi的回复:]……如果问题太基础,其实你可以回答一下里面的第二个和第三个问题,数据类型长度和什么有关,怎样测得int型数据的长度,用sizeof()?

你一定没百度 你一搜所有的问题都不是问题
int位数主要和编译器有关 其实也就是和你cpu的位数有关
8位 16位 一般都是俩字节
32位的四字节
用sizeof 一调试就出来了[/quote]

从51单片机的datasheet可以看出,51所对应的C语言编程中int类型对应的字节数是2,STM32对应的是4字节,和你说的能对上。和编译器有关也能理解。
但是,你说的和CPU位数有关,是单片机CPU还是电脑的CPU?确实有点蒙圈。
并且,好像在用keil写51程序时,int类型是用4字节范围,好像也没问题,是可以执行的。
绕晕了……
das白 2017-12-10
  • 打赏
  • 举报
回复
引用 2 楼 huayangshiboqi的回复:
……如果问题太基础,其实你可以回答一下里面的第二个和第三个问题,数据类型长度和什么有关,怎样测得int型数据的长度,用sizeof()?
你一定没百度 你一搜所有的问题都不是问题 int位数主要和编译器有关 其实也就是和你cpu的位数有关 8位 16位 一般都是俩字节 32位的四字节 用sizeof 一调试就出来了
huayangshiboqi 2017-12-10
  • 打赏
  • 举报
回复
……如果问题太基础,其实你可以回答一下里面的第二个和第三个问题,数据类型长度和什么有关,怎样测得int型数据的长度,用sizeof()?
das白 2017-12-10
  • 打赏
  • 举报
回复
百度 int占多少字节

27,508

社区成员

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

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