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

[复制链接]
1476|8
 楼主| 112412的v 发表于 2020-8-10 11:51 | 显示全部楼层 |阅读模式
RT,程序当中有个unsigned int 做记数标志位的,六万多就应该超了,如果超了会不会导致程序跑飞等bug?
 楼主| 112412的v 发表于 2020-8-10 11:52 | 显示全部楼层
实际测下来并不会跑飞,但依然是隐患,已经做了清零处理
LcwSwust 发表于 2020-8-10 11:59 | 显示全部楼层
数据加法溢出本身并不会引起跑飞等BUG,

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

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

我的a已经跑到2000w+了。。。。不应该是乱码或者是清零吗

评论

奥。这个好像是32位可以跑4294967295。。。  发表于 2020-8-10 13:58
 楼主| 112412的v 发表于 2020-8-10 13:59 | 显示全部楼层
int main(int argc, char* argv[])
{
        unsigned int a =4294967295;
                a++;
        printf("%d\n",a);
        return 0;
}

确实如3L大神所说,a为0了
jiekou001 发表于 2020-8-10 23:59 | 显示全部楼层
超过的舍去了。
CoolSilicon 发表于 2020-8-11 09:52 | 显示全部楼层
112412的v 发表于 2020-8-10 13:48
microsoft visual c++环境下跑的代码:

int main(int argc, char* argv[])

这个要看单片机 和 VC定义的int字长的...
wooda 发表于 2020-8-11 09:55 | 显示全部楼层
安全点, 累加后取个余数,如果速度要求不高的话
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

63

帖子

0

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