已阅读 Should you always use 'int' for numbers in C, even if they are non-negative? 中的所有答案和评论我仍然不确定在以下情况下该怎么办。
两个远程设备正在对各自位置的事件进行计数。他们定期向电脑报告计数器读数,其中反馈算法以某种方式将计数器读数的差异保持在范围内。事件序列是无穷无尽的,因此读数以 2^n 为模进行报告。对于模算术,建议使用无符号整数。然而,这种差异很可能变成负数。在计算差异之前,将读数转换为有符号整数在我测试的平台上效果很好(也就是说,我得到的差异是模 2^n,值的大小很小)。将读数声明为已经在界面中签名会产生优雅的代码。然而,代码应该是可移植的。我可以选择 U.B.严重警告吗?
最佳答案
Shall I take the U.B. warning seriously?
如果您不想让编译器或 CPU 欺骗您,您的代码应该是无 UB 的。
关于c - c 中带符号整数的模算术未定义行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15994917/