[PIC®/AVR®/dsPIC®产品] pic程序中的变量累加溢出会怎样?

[复制链接]
1029|15
 楼主| zhenykun 发表于 2022-2-19 12:47 | 显示全部楼层 |阅读模式
本帖最后由 pzsh 于 2022-2-19 13:04 编辑

RT,程序当中有个unsigned int 做记数标志位的,六万多就应该超了,如果超了会不会导致程序跑飞等bug?
zhanghqi 发表于 2022-2-19 12:49 | 显示全部楼层
实际测下来并不会跑飞,但依然是隐患,已经做了清零处理
chuxh 发表于 2022-2-19 12:52 | 显示全部楼层
数据加法溢出本身并不会引起跑飞等BUG,

unsigned int t=65535,x=1,y;
y=t+x;
这里将会得到y=0;
仅仅做了个加法,没影响到其它东西,所以最终还是要看你对“记数标志位”的应用中有没有问题。
加减乘溢出一般没啥大问题,除法就要小心了,除数为0一般会死机。
 楼主| zhenykun 发表于 2022-2-19 12:54 | 显示全部楼层
microsoft visual c++环境下跑的代码:

int main(int argc, char* argv[])
{
        unsigned int a =65535;
        while(1)
        {
                a++;
        printf("%d\n",a);
        }
        return 0;
}

我的a已经跑到2000w+了。。。。不应该是乱码或者是清零吗
 楼主| zhenykun 发表于 2022-2-19 12:58 | 显示全部楼层
int main(int argc, char* argv[])
{
        unsigned int a =4294967295;
                a++;
        printf("%d\n",a);
        return 0;
}

确实如3L大神所说,a为0了
jiajs 发表于 2022-2-19 13:02 | 显示全部楼层
超过的舍去了。
pzsh 发表于 2022-2-19 13:03 | 显示全部楼层
所有有的程序设计,一开始就对变量进行合理性检查,以防出现问题
supernan 发表于 2022-2-19 13:04 | 显示全部楼层
这个要看单片机 和 VC定义的int字长的...
heweibig 发表于 2022-2-19 13:06 | 显示全部楼层
安全点, 累加后取个余数,如果速度要求不高的话
 楼主| zhenykun 发表于 2022-2-19 13:09 | 显示全部楼层

嗯,那我按大家的说法挨个排查一下,谢谢哈
tpgf 发表于 2022-3-7 13:10 | 显示全部楼层
不是很明白楼主的意思啊
drer 发表于 2022-3-7 13:22 | 显示全部楼层
那得具体情况具体分析了
wiba 发表于 2022-3-7 13:34 | 显示全部楼层
应该会报错啊
kxsi 发表于 2022-3-7 13:50 | 显示全部楼层
那得看楼主如何进行处理
zljiu 发表于 2022-3-7 13:58 | 显示全部楼层
这个结果得看程序了
tfqi 发表于 2022-3-7 14:12 | 显示全部楼层
极有可能会跑飞
您需要登录后才可以回帖 登录 | 注册

本版积分规则

868

主题

11535

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部