PIC中的整数溢出 – 流程在哪里?

PIC中的整数溢出 – 流程在哪里?,第1张

概述使用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,但是额外的翻转位 使用microchip 18f4620 PIC.但这应该是标准的ANSI C问题.

@H_419_8@

说我有@H_419_8@

@H_419_8@

unsigned int16 badFlow=65535 //max unsigned int16 value

其二进制值为1111 1111 1111 1111.@H_419_8@

如果我那么@H_419_8@

@H_419_8@

badFlow++;

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

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

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

我的问题:一位同事用一个柜台写了一些不好的代码,这个柜台已经在所有生产的产品上溢出了大约2年.考虑到我们的客户对这些工具的使用收费,由于潜在的糟糕数据,这是几百万美元的危险.@H_419_8@解决方法 C中的算术使用值而不是内存中的字节进行.你的表达式badFlow等同于badFlow = badFlow 1.右侧被评估为int类型(由于默认促销,假设int大于16位;如果int只有16位,那么它将被评估为unsigned int)得到65536,然后当65536被分配到无符号的16位变量时,它以模数65536减少,结果为0.

@H_419_8@

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

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

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

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1224013.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存