OJF*_*ord 0 c unsigned types integer-arithmetic
我正在读取一个24位值,现在变成一个uint32_t变量.
在我的头撞墙后计算两个这样的变量之间的区别,并认为"它是无符号的!为什么这个溢出是一个问题?!",我意识到这些值超出了包含它们的变量的大小.
这是一个计数器,因此人们知道它比另一个"更大",尽管可能已经溢出.
因此,0x1 - 0x2 = 0xFFFFFFFF但应该是0x00FFFFFF.
我该如何处理这个问题?
uint24;if/ else在做适当算术之前更大;"最佳"应被解释为"最佳实践"/"最具可读性"/"最安全".
要减去(或添加)两个数字并使结果环绕无符号24位数的范围,请执行二进制和结果0xFFFFFF,即(x-y) & 0xFFFFFF.例如:
(0x1 - 0x2) & 0xFFFFFF == 0xFFFFFF
Run Code Online (Sandbox Code Playgroud)