如何以类型的安全方式分配UINT32_T :: MAX和UINT64_T的最小值

How to assign min of uint32_t::max and uint64_t in type safe manner?

本文关键字:MAX 最小值 UINT64 分配 类型 安全 方式 UINT32      更新时间:2023-10-16

我想以类型的安全方式分配两个UINT64_T数字的最小差值和UINT32_T的最大数值限制。有办法做到吗?

uint32_t max32 = std::numeric_limits<uint32_t>::max();
uint64_t a, b;
uint32_t minValue = std::min(max32, b - a);
                               ^^^^^^ (Parameter mismatch warning)

基本上。如果A和B之间的差异大于UINT32_T的最大值,则我想使用最大值,否则我想使用差异。我需要在仅接受uint32_t的API中使用minValue

您可以使用:

minValue = static_cast<uint32_t>(
               std::min(static_cast<uint64_t>(max32),
                        a < b ? b - a : a - b));

static_castmax32创建一个64位的无符号值,以匹配ab的差异类型。

请注意,当您从较小的数字中减去较大的未签名数字时,结果通常会缠绕 - 通常是很大的数字。例如,(uint8_t)2 - (uint8_t)3将产生255。这就是为什么我使用?/:逻辑来解决哪种方式执行扣除的原因。