C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了PIC中的整数溢出 – 流程在哪里?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_874_4@ 使用Microchip 18f4620 PIC.但这应该是标准的ANSI C问题.

我有

unsigned int16 badFlow=65535 //max unsigned int16 value

其二进制值为1111 1111 1111 1111.

如果我那么

badFlow++;

位模式变为1 0000 0000 0000 0000
17位.显然badFlow == 0,但是额外的翻转位也是

>被丢弃
>或驻留在任何字节* flowPtr =& badFlow 2;
点.

我假设后者,但希望前者.

我的问题:一位同事用一个柜台写了一些不好的代码,这个柜台已经在所有生产的产品上溢出了大约2年.虑到我们的客户对这些工具的使用收费,由于潜在的糟糕数据,这是几百万美元的危险.

解决方法@H_801_31@
C中的算术使用值而不是内存中的字节进行.你的表达式badFlow等同于badFlow = badFlow 1.右侧被评估为int类型(由于认促销,假设int大于16位;如果int只有16位,那么它将被评估为unsigned int)得到65536,然后当65536被分配到无符号的16位变量时,它以模数65536减少,结果为0.

摆脱这个问题的重要一点是badFlow不是对& badFlow的内存的直接操作(尽管它可能在某些实现中实现).它只是添加和赋值的简写.

大佬总结

以上是大佬教程为你收集整理的PIC中的整数溢出 – 流程在哪里?全部内容,希望文章能够帮你解决PIC中的整数溢出 – 流程在哪里?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。