标题: 对两个C语言INT变量进行加减乘除操作请教下使用8位单片机怎么 [打印本页]

作者: erwtr    时间: 2022-2-26 14:44
标题: 对两个C语言INT变量进行加减乘除操作请教下使用8位单片机怎么
我使用的是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;

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

作者: percy    时间: 2022-2-26 20:21
首先你应描述数据是怎么个不对法。再一个确认出错不是因为int溢出?
作者: rundstedt    时间: 2022-2-26 23:09
那么串口助手发出来的数据又是什么呢?
作者: 两仪式    时间: 2022-2-27 00:02
找个在线平台用纯C验证下看看
作者: wulin    时间: 2022-2-27 10:35
楼主根据串口调试助手发出数据不对,就说是数组里面会被重新赋值是没有证据的。用Keil走单步查看数组就一目了然了。
作者: erwtr    时间: 2022-2-27 12:09
我现在把关于Z数组的赋值句段给注释掉了,现在直接用初值计算,现在是-25000+5000,这个对于int来说肯定不会溢出把,但是串口调试助手的结果看起来,是D9 F0,请看图片,输出的就是那两个字节,我算了一下是-23024,所以这样处理有问题,照理说应该是-10000的

c790f12016933a7d0e504f991a588bf.png (33.69 KB, 下载次数: 25)

c790f12016933a7d0e504f991a588bf.png

534d0ed8d2a4a9cf110c83f77f9eccb.png (3.68 KB, 下载次数: 39)

534d0ed8d2a4a9cf110c83f77f9eccb.png

7365bd4e2a9c0ad1cd2c1a53e3d1bc2.png (1.66 KB, 下载次数: 39)

7365bd4e2a9c0ad1cd2c1a53e3d1bc2.png

c790f12016933a7d0e504f991a588bf.png (33.69 KB, 下载次数: 19)

串口助手结果

串口助手结果

534d0ed8d2a4a9cf110c83f77f9eccb.png (3.68 KB, 下载次数: 25)

把Z赋值的句段注释掉了

把Z赋值的句段注释掉了

7365bd4e2a9c0ad1cd2c1a53e3d1bc2.png (1.66 KB, 下载次数: 40)

改变了Z的初值

改变了Z的初值

作者: erwtr    时间: 2022-2-27 12:10
发表于 2022-2-26 23:09
那么串口助手发出来的数据又是什么呢?

请看一下我后面的回复,我回复现在还在审核
作者: erwtr    时间: 2022-2-27 12:10
percy 发表于 2022-2-26 20:21
首先你应描述数据是怎么个不对法。再一个确认出错不是因为int溢出?

请看一下我后面的回复,现在正在审核
作者: TEC    时间: 2022-2-27 15:37
erwtr 发表于 2022-2-27 12:09
我现在把关于Z数组的赋值句段给注释掉了,现在直接用初值计算,现在是-25000+5000,这个对于int来说肯定不 ...

最好把代码贴全一点,比如你定义的数据类型,Send_int_Data函数的定义方式等,这样更方便分析。
作者: rundstedt    时间: 2022-2-27 16:50
正确答案是D8F0,你输出了D9F0,差了一位,应该不是计算错误,可能是输出有什么问题。
作者: yzwzfyz    时间: 2022-2-28 15:55
图中每个字节表示的数是什么呢?哪个是X0?Z1?……




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1