PIC中的整数溢出 – 流程在哪里?
发布时间:2020-12-16 06:45:49 所属栏目:百科 来源:网络整理
导读:使用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问题.
说我有 unsigned int16 badFlow=65535 //max unsigned int16 value 其二进制值为1111 1111 1111 1111. 如果我那么 badFlow++; 位模式变为1 0000 0000 0000 0000 >被丢弃 我假设后者,但希望前者. 我的问题:一位同事用一个柜台写了一些不好的代码,这个柜台已经在所有生产的产品上溢出了大约2年.考虑到我们的客户对这些工具的使用收费,由于潜在的糟糕数据,这是几百万美元的危险. 解决方法
C中的算术使用值而不是内存中的字节进行.你的表达式badFlow等同于badFlow = badFlow 1.右侧被评估为int类型(由于默认促销,假设int大于16位;如果int只有16位,那么它将被评估为unsigned int)得到65536,然后当65536被分配到无符号的16位变量时,它以模数65536减少,结果为0.
摆脱这个问题的重要一点是badFlow不是对& badFlow的内存的直接操作(尽管它可能在某些实现中实现).它只是添加和赋值的简写. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |