打印

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

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

使用特权

评论回复
评论
112412的v 2020-8-10 13:58 回复TA
奥。这个好像是32位可以跑4294967295。。。 
5
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了

使用特权

评论回复
6
jiekou001| | 2020-8-10 23:59 | 只看该作者
超过的舍去了。

使用特权

评论回复
7
CoolSilicon| | 2020-8-11 09:52 | 只看该作者
112412的v 发表于 2020-8-10 13:48
microsoft visual c++环境下跑的代码:

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

这个要看单片机 和 VC定义的int字长的...

使用特权

评论回复
8
wooda| | 2020-8-11 09:55 | 只看该作者
安全点, 累加后取个余数,如果速度要求不高的话

使用特权

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

本版积分规则

16

主题

63

帖子

0

粉丝