【发布时间】:2023-03-16 14:00:02
【问题描述】:
使用 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,但额外的翻转位要么
- 被丢弃
- 或居住在
byte* flowPtr = &badFlow+2;的任何地方 分。
我假设是后者,但希望是前者。
我的问题:一位同事使用计数器编写了一些错误代码,该计数器已在所有生产的产品上溢出约 2 年。考虑到我们的客户对使用这些工具的收费,由于潜在的不良数据,这意味着几百万美元的风险。
【问题讨论】:
-
听起来你应该使用更大的数据类型。
-
@Mysticial 是的。这已经得到纠正。我只是想弄清楚我们是否需要回去纠正过去的不当行为。
-
我认为 #2 无效 -
resides at wherever byte* flowPtr = &badFlow+2; -
这可能很晚了,但我很好奇;你的编译器是什么?
标签: c int pic integer-overflow