gpt4 book ai didi

C unsigned int 比较 - 环绕自定义位数

转载 作者:太空宇宙 更新时间:2023-11-04 05:26:31 25 4
gpt4 key购买 nike

我正在读取一个 24 位值,目前将其写入 uint32_t 变量。

在用头撞墙计算两个这样的变量之间的差异并思考“它是无符号的!为什么这个溢出是个问题?!”之后,我意识到这些值超出了包含它们的变量的大小。

这是一个计数器,因此已知一个比另一个“大”,但可能已经溢出。

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

我应该如何最好地处理这个问题?

  • 定义一个类型uint24;
  • if/else 在进行适当的运算之前,哪个更大;
  • 还有什么我没有想到的?

“最佳”应解释为“最佳实践”/“最易读”/“最安全”。

最佳答案

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

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

关于C unsigned int 比较 - 环绕自定义位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24934071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com