c - c 中带符号整数的模算术未定义行为?

标签 c unsigned undefined-behavior signed

已阅读 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/

相关文章:

c - 为什么 memset init 部分?

C - 如何在 while 循环中处理用户输入

c++ - "const"在 C 和 C++ 中有何不同?

fortran - Fortran 编译器是否强制或假定 PURE 关键字为真?

java - 在 var 的初始化期间使用 this.var

c - 防止使用数据段(优化复制)到本地堆栈数据结构/数组

c# - 是否有与 .NET 兼容但不支持无符号类型的语言?

c - 在 C 中使用 %u 和 %d 打印内存地址的区别?

c++ - For 循环中奇怪的 LLVM 无符号到有符号转换

c - 是 unsigned char a[4][5]; [1][7];未定义的行为?