我想以类型安全的方式分配两个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
。
答案 0 :(得分:5)
您可以使用:
minValue = static_cast<uint32_t>(
std::min(static_cast<uint64_t>(max32),
a < b ? b - a : a - b));
static_cast
从max32
创建一个64位无符号值,以匹配a
和b
的差异类型。
请注意,当您从较小的无符号数中减去较大的无符号数时,结果将会回滚 - 通常是一些非常大的数。例如,(uint8_t)2 - (uint8_t)3
将产生255.这就是为什么我使用?
/ :
逻辑来计算执行减法的方法。