C语言中的内存问题(51单片机应用中出现的问题)

这几天跟同学一起做模电大作业,有一次用到久违的单片机,使用C语言编写单片机控制程序,有一块用到数模转换物体重量并显示到lcd1602上,其中出现了一个小问题,代码如下

void ValueToString(unsigned char *str, unsigned char val){
	unsigned long int sum;
    sum = (val*500) / 255;
    str[0] = (sum/100) + '0'; 
    str[1] = (sum/10%10) + '0'; 
    str[2] = '.';
    str[3]=(sum%10)+'0';
    str[4] = 'k'; 
    str[5]='g';
    str[6] = '\0'; 
}

先解释一下代码,我希望将PCF8591检测到的电压值乘5后保留一位小数输出,按理来说最多应该输出50kg,但每次都会出现在25.6kg以后不能正常输出,开始时很困扰,我明明将sum定义位unsigned long int 类型的了,应该没有理由会溢出呀,难道1602有毒,卧槽,好绝望…
躺在床上突然觉得哪里不对,8591是8位ADC,也就是说val最大是255,那val*500的中间结果是127500,这个结果会放在哪里呢,肯定是放在val的内存空间呀,而val是char 型,只有255个空间,这肯定溢出啊,所以我们应该在最初时就将val扩容,

`unsigned long int sum=val;

这样就可以了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值