我正在读取一个24位的值,现在变成一个uint32_t变量。
我的头撞在墙上,计算出这两个变量之间的差异,然后想“这是无符号的!为什么溢出是个问题?!”,我意识到这些值的大小已经超出了包含它们的变量的大小。
这是一个计数器,因此已知其中一个比另一个“大”,尽管可能已溢出。
因此,0x1 - 0x2 = 0xFFFFFFFF,但应该是0x00FFFFFF
我该如何处理这个问题?
定义类型uint24
if/else在进行适当的运算之前,该值较大;
还有什么我没想到的?
“最佳”应解释为“最佳实践”/“最可读”/“最安全”。

最佳答案

若要减去(或相加)两个数字并使结果环绕无符号24位数字的范围,请使用0xFFFFFF,即(x-y) & 0xFFFFFF对结果执行二进制运算。例如:

(0x1 - 0x2) & 0xFFFFFF == 0xFFFFFF

10-07 21:01