我正在读取一个24位值,目前变为uint32_t
变量。计算两个这样的变量之间的差异,并思考“它是无符号的!为什么这会溢出一个问题?!”,我意识到这些值已经超出了包含它们的变量的大小。C无符号整数比较 - 环绕自定义位数
这是一个计数器,所以人们知道它比另一个'大',虽然可能溢出了。因此,0x1 - 0x2 = 0xFFFFFFFF
,但应该是0x00FFFFFF
。
我该怎么处理这件事?
- 定义类型
uint24
; if
/else
在做适当的算术之前哪个更大;- 我还没有想到的其他东西?
'最好'应该被解释为'最佳实践'/'最可读'/'最安全'。
1.您能否给您所遇到的问题的例子吗?有输入和预期结果。 2.你想减法的结果是有符号还是无符号的? – interjay
@interjay结果也是无符号的 - 这是一个计数器,所以一个是已知的更大;签名的结果将毫无意义/ MSb浪费。 – OJFord
然后我没有看到问题是什么。如果从较大的数字中减去较小的数字,则不会发生溢出。 – interjay