找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1875|回复: 10
收起左侧

对两个C语言INT变量进行加减乘除操作请教下使用8位单片机怎么

[复制链接]
ID:440814 发表于 2022-2-26 14:44 | 显示全部楼层 |阅读模式
我使用的是STC12C5A60S2单片机,我想实现求3个数组的平均值,数组和变量的类型全是int型,部分代码如下:
int x[2]={-30000,30000};
int y[2]={-30000,30000};
int z[2]={-30000,30000};

经过下一段程序XYZ数组里面会被赋值,先不管赋值的溢出,默认不溢出。进行下面的程序:
X_OFFSET=(x[0]+x[1])/2;
Y_OFFSET=(y[0]+y[1])/2;
Z_OFFSET=(z[0]+z[1])/2;

结果我使用串口调试助手发出来发现数据不对,想请教一下,这段代码(求平均值的)应该怎么取处理它。
回复

使用道具 举报

ID:1006852 发表于 2022-2-26 20:21 | 显示全部楼层
首先你应描述数据是怎么个不对法。再一个确认出错不是因为int溢出?
回复

使用道具 举报

ID:879809 发表于 2022-2-26 23:09 | 显示全部楼层
那么串口助手发出来的数据又是什么呢?
回复

使用道具 举报

ID:440403 发表于 2022-2-27 00:02 | 显示全部楼层
找个在线平台用纯C验证下看看
回复

使用道具 举报

ID:213173 发表于 2022-2-27 10:35 | 显示全部楼层
楼主根据串口调试助手发出数据不对,就说是数组里面会被重新赋值是没有证据的。用Keil走单步查看数组就一目了然了。
回复

使用道具 举报

ID:440814 发表于 2022-2-27 12:09 | 显示全部楼层
我现在把关于Z数组的赋值句段给注释掉了,现在直接用初值计算,现在是-25000+5000,这个对于int来说肯定不会溢出把,但是串口调试助手的结果看起来,是D9 F0,请看图片,输出的就是那两个字节,我算了一下是-23024,所以这样处理有问题,照理说应该是-10000的
c790f12016933a7d0e504f991a588bf.png
534d0ed8d2a4a9cf110c83f77f9eccb.png
7365bd4e2a9c0ad1cd2c1a53e3d1bc2.png

串口助手结果

串口助手结果

把Z赋值的句段注释掉了

把Z赋值的句段注释掉了

改变了Z的初值

改变了Z的初值
回复

使用道具 举报

ID:440814 发表于 2022-2-27 12:10 | 显示全部楼层
发表于 2022-2-26 23:09
那么串口助手发出来的数据又是什么呢?

请看一下我后面的回复,我回复现在还在审核
回复

使用道具 举报

ID:440814 发表于 2022-2-27 12:10 | 显示全部楼层
percy 发表于 2022-2-26 20:21
首先你应描述数据是怎么个不对法。再一个确认出错不是因为int溢出?

请看一下我后面的回复,现在正在审核
回复

使用道具 举报

ID:625730 发表于 2022-2-27 15:37 | 显示全部楼层
erwtr 发表于 2022-2-27 12:09
我现在把关于Z数组的赋值句段给注释掉了,现在直接用初值计算,现在是-25000+5000,这个对于int来说肯定不 ...

最好把代码贴全一点,比如你定义的数据类型,Send_int_Data函数的定义方式等,这样更方便分析。
回复

使用道具 举报

ID:879809 发表于 2022-2-27 16:50 | 显示全部楼层
正确答案是D8F0,你输出了D9F0,差了一位,应该不是计算错误,可能是输出有什么问题。
回复

使用道具 举报

ID:123289 发表于 2022-2-28 15:55 | 显示全部楼层
图中每个字节表示的数是什么呢?哪个是X0?Z1?……
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表