打印
[PIC®/AVR®/dsPIC®产品]

pic程序中的变量累加溢出会怎样?

[复制链接]
791|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+了。。。。不应该是乱码或者是清零吗

使用特权

评论回复
5
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了

使用特权

评论回复
6
jiajs| | 2022-2-19 13:02 | 只看该作者
超过的舍去了。

使用特权

评论回复
7
pzsh| | 2022-2-19 13:03 | 只看该作者
所有有的程序设计,一开始就对变量进行合理性检查,以防出现问题

使用特权

评论回复
8
supernan| | 2022-2-19 13:04 | 只看该作者
这个要看单片机 和 VC定义的int字长的...

使用特权

评论回复
9
heweibig| | 2022-2-19 13:06 | 只看该作者
安全点, 累加后取个余数,如果速度要求不高的话

使用特权

评论回复
10
zhenykun|  楼主 | 2022-2-19 13:09 | 只看该作者

嗯,那我按大家的说法挨个排查一下,谢谢哈

使用特权

评论回复
11
tpgf| | 2022-3-7 13:10 | 只看该作者
不是很明白楼主的意思啊

使用特权

评论回复
12
drer| | 2022-3-7 13:22 | 只看该作者
那得具体情况具体分析了

使用特权

评论回复
13
wiba| | 2022-3-7 13:34 | 只看该作者
应该会报错啊

使用特权

评论回复
14
kxsi| | 2022-3-7 13:50 | 只看该作者
那得看楼主如何进行处理

使用特权

评论回复
15
zljiu| | 2022-3-7 13:58 | 只看该作者
这个结果得看程序了

使用特权

评论回复
16
tfqi| | 2022-3-7 14:12 | 只看该作者
极有可能会跑飞

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

868

主题

11535

帖子

3

粉丝