C unsigned int比较 - 包含自定义位数

OJF*_*ord 0 c unsigned types integer-arithmetic

我正在读取一个24位值,现在变成一个uint32_t变量.

在我的头撞墙后计算两个这样的变量之间的区别,并认为"它是无符号的!为什么这个溢出是一个问题?!",我意识到这些值超出了包含它们的变量的大小.

这是一个计数器,因此人们知道它比另一个"更大",尽管可能已经溢出.

因此,0x1 - 0x2 = 0xFFFFFFFF但应该是0x00FFFFFF.

我该如何处理这个问题?

  • 定义一个类型uint24;
  • if/ else在做适当算术之前更大;
  • 还有什么别的我没有想到的?

"最佳"应被解释为"最佳实践"/"最具可读性"/"最安全".

int*_*jay 6

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

(0x1 - 0x2) & 0xFFFFFF == 0xFFFFFF
Run Code Online (Sandbox Code Playgroud)