如何以类型安全的方式分配uint32_t :: max和uint64_t的min?

时间:2018-04-27 23:47:53

标签: c++

我想以类型安全的方式分配两个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

1 个答案:

答案 0 :(得分:5)

您可以使用:

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.这就是为什么我使用? / :逻辑来计算执行减法的方法。